2009-02-25 55 views
0

我想知道下面的声明是做什么的。我已经在MSVisual Studio Compiled代码的C代码中看到了它们。以下声明/关键字背后的解释是什么?

的extern “C” __declspec(DLLEXPORT)

的extern “C” __declspec(dllimport的)

我有点知道他们是用于声明为函数的外部连接(功能在不同的源file.But定义想详细了解如何工作的。

-Ajit

回答

1

DLLEXPORT告诉编译器生成一个.lib file。dllimport的告诉编译器中的.lib文件查找功能decla配给(它的定义将在一个dll中)。

1

这意味着功能/它后面的是跨DLL边界可见的和可访问的,所以你可以链接对他们和其他代码调用它们类

3

extern "C"部分告诉该项目正在申报一个C++编译器会使用C链接,这意味着该名称不会被破坏(或者将会像C编译器那样被破坏)。这使得它可以链接到C代码和大多数其他语言,因为C连接通常是在平台上使用的标准。

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