使用 __declspec(dllexport) 从 DLL 导出

可以使用 __declspec(dllexport) 关键字从 DLL 中导出数据、函数、类或类成员函数。 __declspec(dllexport) 将导出指令添加到对象文件中,因此你不需要使用 .def 文件。

尝试导出已修饰的 C++ 函数名称时,这种便利性最为明显。 由于名称修饰没有标准规范,因此,导出函数的名称可能会因编译器版本而异。 如果你使用 __declspec(dllexport),则只有在考虑到任何命名约定更改时,才需要重新编译 DLL 和依赖 .exe 文件。

许多导出指令只能在 .def 文件中创建,例如 ordinals、NONAME 和 PRIVATE,并且没有 .def 文件就无法指定这些属性。 不过,除了使用 .def 文件外还使用 __declspec(dllexport) 不会导致生成错误出现。

若要导出函数,__declspec(dllexport) 关键字必须出现在调用约定关键字的左侧(如果指定了关键字的话)。 例如:

__declspec(dllexport) void __cdecl Function1(void);

若要导出类中的所有公共数据成员和成员函数,该关键字必须出现在类名的左侧,如下所示:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

注意

__declspec(dllexport) 不能应用于采用 __clrcall 调用约定的函数。

生成 DLL 时,通常会创建一个包含要导出的函数原型和/或类的头文件,并将 __declspec(dllexport) 添加到头文件中的声明内。 为了提高代码的可读性,请为 __declspec(dllexport) 定义宏,并对要导出的每个符号使用此宏:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) 将函数名称存储在 DLL 的导出表中。 如果要优化表的大小,请参阅按序号而不是按名称从 DLL 导出函数

你希望做什么?

你想进一步了解什么?

另请参阅

从 DLL 导出