dllexport, dllimport

Microsoft 专用

dllexportdllimport 存储类特性是 C 和 C++ 语言的 Microsoft 专用扩展。 可以使用它们从 DLL 中导出或向其中导入函数、数据和对象。

语法

__declspec( dllimport ) declarator
__declspec( dllexport ) declarator

备注

这些特性显式定义 DLL 到其客户端的接口,可以是可执行文件或另一个 DLL。 如果将函数声明为 dllexport,则不再需要模块定义 (.def) 文件,至少在有关导出函数的规范方面是这样。 dllexport 特性取代了 __export 关键字。

如果将类标记为 __declspec(dllexport),则类层次结构中类模板的任何专用化都将隐式标记为 __declspec(dllexport)。 这意味着类模板将进行显式实例化,且必须定义类的成员。

函数的 dllexport 使用其修饰名(有时称为“名称重整”)公开函数。 对于 C++ 函数,修饰名包括对类型和参数信息进行编码的额外字符。 C 函数或声明为 extern "C" 的函数包括基于调用约定的平台特定修饰。 名称修饰不适用于导出的 C 函数或使用 __cdecl 调用约定的 C++ extern "C" 函数。 有关 C/C++ 代码中名称修饰的详细信息,请参阅修饰名

若要导出未修饰名,可以通过使用模块定义 (.def) 文件进行链接,该文件在 EXPORTS 部分定义了未修饰名。 有关详细信息,请参阅 EXPORTS。 导出未修饰名的另一种方法是在源代码中使用 #pragma comment(linker, "/export:alias=decorated_name") 指令。

在声明 dllexportdllimport 时,必须使用__declspec 关键字。

示例

// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();

或者,若要提高代码的可读性,可以使用宏定义:

#define DllImport   __declspec( dllimport )
#define DllExport   __declspec( dllexport )

DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;

有关详细信息,请参阅:

结束 Microsoft 专用

另请参阅

__declspec
关键字