考虑以下来源library.cpp
struct parameter {
const char *path;
int num;
bool flag;
/* and many, many more members... */
};
__declspec(dllexport) void func(const parameter &);
这将编译到库library.dll
。
据我了解,导出声明只导出函数和数据。由于结构parameter
没有定义任何函数,因此这里没有必要,我省略了它。
但是
dumpbin.exe /EXPORTS library.dll
揭示,这里确实存在真正的差异:方法operator = (const parameter &)
将被导出。
问题:导出parameter
是否有任何重要原因,即在__declspec(dllexport)
前添加parameter
? POD结构的最佳实践是什么。
答案 0 :(得分:0)
通常情况下,像struct
这样的POD只包含数据(也是基本类型)而没有函数,只是在" .h"与相应的.dll
一起提供的文件。
//MyDLL.h -------------------------------------------------
#ifndef __MYDLL_DOT_H__
#define __MYDLL_DOT_H__
struct parameter
{
const char *path;
int num;
bool flag;
};
#ifdef __DLLEXPORT__
__declspec(dllexport) void func(const parameter &);
#else
__declspec(dllimport) void func(const parameter &);
#endif
#endif //#ifndef __MYDLL_DOT_H__
//MyDLL.h -------------------------------------------------
//Client_Of_MyDLL.cpp -------------------------------------
#include "MyDLL.h"
int main()
{
parameter stParameters;
//initialize parameters of stParameters
func(stParameters);
}
//Client_Of_MyDLL.cpp -------------------------------------
编辑:由于POD包含纯数据,因此DLL
和DLL
的客户端中此类POD的声明保持不变。这里纯粹的数据意味着没有member functions
即使POD有另一个struct
说,B里面有一些member function B::func()
。那么,没有重要的理由将结构与函数一起导出。