我想知道以下声明的作用。我在MSVisual Studio Compiled代码的C代码中看到过它们。
extern“C”__ declspec(dllexport)
extern“C”__ declspec(dllimport)
我知道它们用于声明函数的外部链接(在不同的源文件中定义的功能。但是想详细了解它是如何工作的。
-Ajit
答案 0 :(得分:3)
extern "C"
部分告诉C ++编译器,声明的项应该使用C链接,这意味着该名称不会被破坏(或者将以与C编译器相同的方式被破坏)。这样就可以将项目链接到C代码和大多数其他语言,因为C链接通常是平台上使用的标准。
__declspec(dllexport)
和__declspec(dllimport)
项是非标准属性,告诉编译器应该从DLL导出(或导入)该项。 MS编译器以及可能针对Windows的其他编译器支持__declspec()
属性。我不确定GCC是否会这样做。可以使用__declspec()
(至少在MSVC中)指定的其他存储类属性包括uuid()
,naked
,deprecated
以及为编译器提供有关对象如何信息的其他属性或编译功能。
答案 1 :(得分:1)
dllexport告诉编译器生成.lib file。 dllimport告诉编译器在.lib文件中查找函数声明(它的定义将在dll中)。
答案 2 :(得分:1)
这意味着它后面的函数/类是可见的,并且可以跨DLL边界访问,因此您可以链接它们并从其他代码中调用它们