dllexport
,dllimport
Microsoft 专用
dllexport
和 dllimport
存储类特性是 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")
指令。
在声明 dllexport
或 dllimport
时,必须使用和 __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 专用
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈