我正在尝试在c#应用程序中使用本机c ++ dll。
我按照this文章开始。
当dll仅使用c文件(如本教程中所述)时,它的工作正常,但是当使用cpp文件时,我无法使其工作。
使用dumpbin工具,我可以看到导出的函数名称已更改。
例如,将函数调用“ next”更改为“?next @@ YAHH @ Z”,当我尝试在c#代码中调用它时,找不到它。
我的dll代码是:
__declspec(dllexport)
int next(int n)
{
return n + 1;
}
C#代码
[DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl)]
extern static int next(int n);
使用c文件或cpp文件时使用相同的代码
提前致谢
阿米猜
最佳答案
您正在尝试做一个蹦床功能,以外部化C ++对象的使用。
您遇到的情况称为符号错误处理。这是一种c ++特定的方式,可以在动态库和可执行文件中命名符号(如函数),以实现多态。
您必须通过在库代码中使用extern "C"
语句来指定要取消破坏效果,如下所示:
extern "C" __declspec(dllexport)
int next(int n)
{
return n + 1;
}
有关此here: Exporting functions from a DLL with dllexport的更多信息