0

我想知道以下声明的作用。我在 MSVisual Studio 编译代码上的 C 代码中看到了它们。

extern "C" __declspec(dllexport)

extern "C" __declspec(dllimport)

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

-阿吉特

4

3 回答 3

3

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

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

于 2009-02-25T15:03:12.263 回答
1

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

于 2009-02-25T14:25:53.663 回答
1

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

于 2009-02-25T14:26:19.387 回答