使用外部"C++"导入 DLL



当我写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));

最新更新