使用CPP DLL中的c#代码

using cpp dll in c# code

本文关键字:代码 中的 DLL CPP 使用      更新时间:2023-10-16

我试图在c#应用程序中使用本机c++ dll。

我从这篇文章开始。

它的工作很好,而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文件时代码相同

提前感谢Amichai

你要做的是做一个蹦床函数,来具体化你的c++对象的使用。

你所经历的被称为符号混乱。这是一种c++特有的命名动态库和可执行文件中的符号(如函数)的方式,以启用多态性。

您必须在库代码中使用extern "C"语句来指定您想要取消混乱效果,就像这样:

extern "C" __declspec(dllexport)
int next(int n)
{
    return n + 1;
}
使用dllexport
从DLL导出函数

请提供入口点

下面的例子

[DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "next", CharSet = CharSet.Ansi)]
static extern int next(int n);

希望有帮助。