__declspec(dllexport)自定义类型变量

时间:2015-11-01 14:55:01

标签: c++ visual-studio dll dllimport dllexport

我正在使用包含多个项目的Visual Studio解决方案(Visual Studio 2013)。一个项目用于生成.dll文件,其他项目使用该.dll文件并生成.exe个文件。当我导出标准类型变量时,一切正常。但是如果我想使用我的自定义类型,我会收到编译错误。这是一个例子

// Dll.cpp
#define DllExport __declspec (dllexport)
DllExport int maxPackSize = 20;
// my custom type
struct DllExport Header
{
    int m_data;    // some data
};
DllExport Header qHead = { 100 };


// Exe.cpp
#define DllImport __declspec (dllimport)
DllImport extern int packetSize;    // OK

struct DllImport Header;
DllImport extern Header qHead;      // leads to an error

当我在qHead中使用Exe.cpp时,我在该行上收到了编译错误。错误就像

  

错误C2027:使用未定义的类型'标题'

我做错了什么?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您收到的错误消息是编译器错误(不是链接器错误!)。 您需要在首次使用之前定义Header

您可以将struct DllExport Header { ... };移至单独的标题文件(例如Dll.h),然后移至#include "Dll.h"中的Exe.cpp

答案 1 :(得分:1)

您需要在标头中导出自定义类型,以便.exe可以看到该类型。例如,

Dll.h

#ifdef EXPORT_SYMBOLS
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

struct DLL_EXPORT Header
{
   int m_data;
};

Exe.cpp

#include "Dll.h"
Header qHead;

您需要将EXPORT_SYMBOLS添加到Dll的预处理程序标志中,以便切换正确的__declspec宏。