以下声明/关键字背后的解释是什么?

时间:2009-02-25 14:20:43

标签: external linkage

我想知道以下声明的作用。我在MSVisual Studio Compiled代码的C代码中看到过它们。

extern“C”__ declspec(dllexport)

extern“C”__ declspec(dllimport)

我知道它们用于声明函数的外部链接(在不同的源文件中定义的功能。但是想详细了解它是如何工作的。

-Ajit

3 个答案:

答案 0 :(得分:3)

extern "C"部分告诉C ++编译器,声明的项应该使用C链接,这意味着该名称不会被破坏(或者将以与C编译器相同的方式被破坏)。这样就可以将项目链接到C代码和大多数其他语言,因为C链接通常是平台上使用的标准。

__declspec(dllexport)__declspec(dllimport)项是非标准属性,告诉编译器应该从DLL导出(或导入)该项。 MS编译器以及可能针对Windows的其他编译器支持__declspec()属性。我不确定GCC是否会这样做。可以使用__declspec()(至少在MSVC中)指定的其他存储类属性包括uuid()nakeddeprecated以及为编译器提供有关对象如何信息的其他属性或编译功能。

答案 1 :(得分:1)

dllexport告诉编译器生成.lib file。 dllimport告诉编译器在.lib文件中查找函数声明(它的定义将在dll中)。

答案 2 :(得分:1)

这意味着它后面的函数/类是可见的,并且可以跨DLL边界访问,因此您可以链接它们并从其他代码中调用它们