应该在哪里放置_declspec?

时间:2018-06-11 15:26:41

标签: c shared-libraries dllexport

我正在从def文件切换到使用_declspec为我维护的库。我在SO和MSDN文档中已经阅读了几个问题。我理解这个功能是如何工作的。我已经创建了宏并使用_declspec或gcc __attribute__,具体取决于构建环境。宏也可以在_declspec(dllexport)_declspec(dllimport)之间正确选择。

在函数定义中使用_declspec有什么害处吗? _declspec只能在函数原型上使用吗?

我更喜欢在功能原型和定义上都使用marco。我在函数原型和定义上使用_declspec进行了测试。使用VS编译的库没有警告,我能够毫无问题地使用库。

1 个答案:

答案 0 :(得分:0)

对函数定义没有任何影响 - 在函数声明中,__declspec(dllimport)是可选的,但如果使用此关键字,编译器会生成更高效的代码。但是,必须使用__declspec(dllimport)导入可执行文件才能访问DLL的公共数据符号和对象。 它主要用于将符号从/导出符号导入共享库(DLL)。 Visual C ++和GCC编译器都支持__declspec(dllimport)和__declspec(dllexport)。

您也可以将它用于变量。