当我编写DLL时,我通常使用类似的代码
extern "C"
{
//some declarations
}
但是我怎么能从DLL中动态加载一个以这种方式编写的函数
extern "C++"
{
__declspec(dllexport) int Foo(int x)
{
return 42;
}
}
当然,我可以通过编写像
这样的代码来手动装饰名称int (*Foo)(int);
Foo = (int(*)(int)) GetProcAddress(hModule, "?Foo@@YAHH@Z");
它会起作用,但它应该是一些正常的方法。
答案 0 :(得分:2)
如果你真的想导出一个C ++函数,那么你的名字会被破坏,就像你发现的那样。
您可以使用module definition file以特定序数导出损坏的函数。完成此操作后,您可以使用GetProcAddress
通过此序号导入:
Foo = (int(*)(int)) GetProcAddress(hModule, MAKEINTRESOURCE(FOO_ORDINAL));