如何在C#中调用C ++库中的方法

时间:2014-10-22 23:32:00

标签: c# c++-cli pinvoke dllimport

我有一个供应商的DLL,意在从C ++调用,但我需要从C#调用它。

使用名为PE Explorer的应用程序我可以在DLL中看到导出方法的列表(现在称之为Protocol.dll),甚至可以获得这样的“未修饰的C ++函数”签名:

public: unsigned int __thiscall Myco::Protocol::tMultiThingClient::GetThings(char (* const)[16],unsigned int)

如何在C#中使用类似的东西?我知道我使用DllImport,我只是不知道如何从上面的签名转到正确的DllImport签名。

总WAG:

[DllImport("Protocol.dll", EntryPoint="GetThings")]
public static extern void GetThings(ref string[], uint);

那是否接近?是否存在可在{+ 1}}之类的C ++声明与其C#等价物之间进行转换的某个引用?

1 个答案:

答案 0 :(得分:1)

您需要使用C ++ CLI创建包含混合程序集的单独项目。为此,您需要在项目属性中启用CLR编译器开关。由于项目允许混合程序集,您可以调用C ++函数,还可以为主程序调用创建一个C#接口。

因此,您的主程序将调用您在C ++ CLI项目中实现的接口,该项目将依次调用DLL中的C ++函数。

如果它适用于您的系统注意事项,请在执行此操作时注意编组和Thunking。