__declspec (dllexport) 自定义类型变量
__declspec (dllexport) custom type variable
我正在研究具有多个项目的 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
当我在 Exe.cpp
中使用 qHead
时,我在该行收到编译错误。错误就像
error C2027: use of undefined type 'Header'
我做错了什么?有什么想法吗?
您收到的错误消息是编译器错误(不是链接器错误!)。
您需要在首次使用前定义 Header
。
您可以将 struct DllExport Header { ... };
移至单独的头文件(例如 Dll.h
),然后将 #include "Dll.h"
移至 Exe.cpp
。
您需要在 header 中导出您的自定义类型,以便您的 .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 宏。
我正在研究具有多个项目的 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
当我在 Exe.cpp
中使用 qHead
时,我在该行收到编译错误。错误就像
error C2027: use of undefined type 'Header'
我做错了什么?有什么想法吗?
您收到的错误消息是编译器错误(不是链接器错误!)。
您需要在首次使用前定义 Header
。
您可以将 struct DllExport Header { ... };
移至单独的头文件(例如 Dll.h
),然后将 #include "Dll.h"
移至 Exe.cpp
。
您需要在 header 中导出您的自定义类型,以便您的 .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 宏。