用extern“C ++”导入DLL

时间:2014-09-01 16:24:25

标签: 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");

它会起作用,但它应该是一些正常的方法。

1 个答案:

答案 0 :(得分:2)

如果你真的想导出一个C ++函数,那么你的名字会被破坏,就像你发现的那样。

您可以使用module definition file以特定序数导出损坏的函数。完成此操作后,您可以使用GetProcAddress通过此序号导入:

Foo = (int(*)(int)) GetProcAddress(hModule, MAKEINTRESOURCE(FOO_ORDINAL));