C# 如何调用 c++ 函数 入参对象指针
时间: 2024-03-01 10:56:24 浏览: 127
基于C#调用c++Dll结构体数组指针的问题详解
在 C# 中调用 C++ 函数,需要使用 Platform Invoke (PInvoke) 技术。具体步骤如下:
1. 在 C# 中声明需要调用的 C++ 函数,声明方式类似于 C++ 的函数声明,但需要添加 extern 关键字和 DllImport 特性,如下:
```
[DllImport("DLLName.dll")]
public static extern void CppFunction(IntPtr objPtr);
```
其中,DllName.dll 为 C++ 动态链接库的名称,CppFunction 为 C++ 函数的名称,IntPtr 为 C++ 函数的参数类型,表示一个指向对象的指针。
2. 在 C# 中创建对象,并获取对象指针,可以使用 GCHandle.Alloc 方法将对象转换为 GCHandle 对象,再使用 GCHandle.AddrOfPinnedObject 方法获取对象指针,如下:
```
MyObject obj = new MyObject();
GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);
IntPtr objPtr = handle.AddrOfPinnedObject();
```
其中,MyObject 为 C++ 函数的参数类型,表示需要传递给 C++ 函数的对象。
3. 调用 C++ 函数,并传递对象指针作为参数,如下:
```
CppFunction(objPtr);
```
注意,需要在调用完 C++ 函数后释放对象的 GCHandle,即调用 GCHandle.Free 方法,如下:
```
handle.Free();
```
这样就可以在 C# 中调用 C++ 函数,并传递对象指针作为参数了。
阅读全文