P/Invoke from C#:调用返回对象的函数

本文关键字:返回 对象 函数 调用 Invoke from | 更新日期: 2023-09-27 18:28:27

我有一个本机/非托管DLL,它有一个返回业务对象指针的"CreateObject"函数。。所以这个电话应该是

[DllImport("MyDll.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateObject();

问题:这个对象公开了我想调用的公共函数,比如"Connect()",但我不知道如何"映射"这些调用,所以我有一个简单的方法签名,比如:

private bool Connect();

有什么想法吗?

P/Invoke from C#:调用返回对象的函数

实现这一点的方法是提供另一个PInvoke函数,该函数调用一个C函数,该C函数执行方法调用

[DllImport("MyDll.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.I1)]
private static extern bool Connect(IntPtr businessObject);

然后在C中定义以下

extern "C" {
  bool Connect(Business* pObject) {
    return pObject->Connect();
  }
}

您必须将C++对象封装在自由函数中:

bool Connect(MyObject* obj)
{
    return obj->Connect();
}

然后从DLL中导出这些。

或者,您可以利用使用C++/CLI进行编译的事实,导出一个托管的C++/CLI类,该类可以由C#代码直接使用。