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

本文关键字:调用 方法 C++ 中从 | 更新日期: 2023-09-27 18:27:27

我有一个供应商的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);

这接近吗?在像char (* const)[16]这样的C++声明和它们的C#等价物之间,是否存在转换的引用?

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

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

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

如果这适用于您的系统考虑因素,请在执行此操作时注意编组和雷电。