在没有 extern "C" 的情况下从 dll 导出 C++ 函数
Exporting a C++ Function from a dll without extern "C"
Objective:
应用程序应该能够使用 LoadLibrary 动态加载 dll 并使用 GetProcAddress 调用其导出的函数。
我的 dll class 有一个返回 class 类型的 unique_ptr 的函数。
我想导出此函数,以便应用程序可以在成功加载 dll 后使用 getProcAddress 调用此函数。
使用 extern "C" 将不允许在函数签名中使用 C++ class(unique_ptr class 模板,在这种情况下)。
我知道,如果不使用 extern "C",它会导出函数(通过 __declspec(dllexport) )并使用一个损坏的名称。
在调用 getProcAddress 的过程中,客户端不会知道经过修饰的名称,那么客户端将如何调用此函数?
有没有办法导出这样的函数?
是的,老式的方式。按名称查找函数是 "modern" 方式(尽管它早于 Windows 95)。旧方法是查找它们 by ordinal。
您需要提供 module definition file 和 EXPORTS
来为您的函数编号。
Objective: 应用程序应该能够使用 LoadLibrary 动态加载 dll 并使用 GetProcAddress 调用其导出的函数。
我的 dll class 有一个返回 class 类型的 unique_ptr 的函数。
我想导出此函数,以便应用程序可以在成功加载 dll 后使用 getProcAddress 调用此函数。
使用 extern "C" 将不允许在函数签名中使用 C++ class(unique_ptr class 模板,在这种情况下)。
我知道,如果不使用 extern "C",它会导出函数(通过 __declspec(dllexport) )并使用一个损坏的名称。
在调用 getProcAddress 的过程中,客户端不会知道经过修饰的名称,那么客户端将如何调用此函数?
有没有办法导出这样的函数?
是的,老式的方式。按名称查找函数是 "modern" 方式(尽管它早于 Windows 95)。旧方法是查找它们 by ordinal。
您需要提供 module definition file 和 EXPORTS
来为您的函数编号。