当我写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");
它会起作用,但这应该是一些正常的方法。
如果您真的想导出C++函数,那么名称就会被破坏,正如您所发现的那样。
您可以使用模块定义文件来导出具有特定序号的损坏函数。完成此操作后,可以使用GetProcAddress
通过以下顺序导入:
Foo = (int(*)(int)) GetProcAddress(hModule, MAKEINTRESOURCE(FOO_ORDINAL));