考虑下面的源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,即在parameter前面添加__declspec(dllexport)?POD结构的最佳实践是什么?
发布于 2016-08-08 10:31:31
通常,像struct一样,它只包含数据(也是基本类型的数据),不包含函数,只在".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,即使过氧化物酶有另一个struct,例如,在它里面有一些member function B::func()。因此,没有任何重要的理由,以出口的结构和功能。
https://stackoverflow.com/questions/38826403
复制相似问题