在虚幻引擎5(Unreal Engine 5)中,以及许多其他使用C++的项目中,__declspec(dllexport)
和 __declspec(dllimport)
是用来处理动态链接库(DLL)的宏定义。这些宏定义是微软特有的扩展,用于指定哪些函数、类和变量应该被导出到DLL中,哪些应该从DLL中导入。
定义解释:
-
__declspec(dllexport)
: 这个宏定义用来声明一个函数、类或变量,使其成为DLL的一部分,并且可以被其他程序或DLL访问。当你创建一个DLL并且希望其中的某些符号(函数、类等)能够被外部程序调用时,你会在这些符号前使用__declspec(dllexport)
。 -
__declspec(dllimport)
: 相反,当你想要从一个DLL中导入符号时,你会使用__declspec(dllimport)
。这告诉编译器这个符号是在另一个DLL中定义的,因此需要在运行时从那个DLL中加载。
-
在 DLL 编译时:
如果你正在编译一个 DLL 文件,并且在编译器的预处理器选项中定义了
MYPROJECTFORPLUG_EXPORTS
,那么MYPROJECTFORPLUG_API
宏会展开为__declspec(dllexport)
,表示符号应该被导出到 DLL 中。// 在 DLL 中编译时 #define MYPROJECTFORPLUG_EXPORTS
这时,如果你有一个类或函数如下:
class MYPROJECTFORPLUG_API AMyClass { public: void MyFunction(); };
MYPROJECTFORPLUG_API
被替换成__declspec(dllexport)
,使得AMyClass
类和它的成员函数MyFunction
会被导出到 DLL 中。