首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DLL导出POD-结构

从DLL导出POD-结构
EN

Stack Overflow用户
提问于 2016-08-08 10:06:35
回答 1查看 685关注 0票数 0

考虑下面的源library.cpp

代码语言:javascript
复制
struct parameter {
    const char *path;
    int num;
    bool flag;
    /* and many, many more members... */
};

__declspec(dllexport) void func(const parameter &);

这将编译为库library.dll

据我所知,出口报关单只具有导出功能和数据。由于parameter结构没有定义任何函数,所以这里没有必要,因此我省略了它。

代码语言:javascript
复制
dumpbin.exe /EXPORTS library.dll

揭示出,实际上这里有一个真正的不同:方法operator = (const parameter &)将被导出。

问题:是否有什么重要的理由输出parameter,即在parameter前面添加__declspec(dllexport)?POD结构的最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-08-08 10:31:31

通常,像struct一样,它只包含数据(也是基本类型的数据),不包含函数,只在".h“文件中声明,该文件与相应的.dll一起给出。

代码语言:javascript
复制
//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包含纯粹的数据,所以在DLLDLL的客户端中,这种POD的声明保持不变。这里纯粹的数据意味着没有member functions,即使过氧化物酶有另一个struct,例如,在它里面有一些member function B::func()。因此,没有任何重要的理由,以出口的结构和功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38826403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档