我有一个供应商的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#等价物之间进行转换的某个引用?
答案 0 :(得分:1)
您需要使用C ++ CLI创建包含混合程序集的单独项目。为此,您需要在项目属性中启用CLR编译器开关。由于项目允许混合程序集,您可以调用C ++函数,还可以为主程序调用创建一个C#接口。
因此,您的主程序将调用您在C ++ CLI项目中实现的接口,该项目将依次调用DLL中的C ++函数。
如果它适用于您的系统注意事项,请在执行此操作时注意编组和Thunking。