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