C#访问C++动态分配的数组指针(实例讲解)
项目中遇到C#调用C++算法库的情况,C++内部运算结果返回矩形坐标数组(事先长度未知且不可预计),下面方法适用于访问C++内部分配的任何结构体类型数组。当时想当然的用refarray[]传递参数,能计算能分配,但是在C#里只得到arr长度是1,无法访问后续数组Item。
C++
接口示例:
voidCall(int*count,Rect**arr) { //….. //重新Malloc一段内存,指针复制给入参,外部调用前并不知道长度,另外提供接口Free内存 //…. }
结构体:
StructRect { intx; inty; intwidth; intheight; };
C#:
结构体:
StructRect { publicintx; publicinty; publicintwidth; publicintheight; }
外部DLL方法声明:
[DllImport("xxx.dll",EntryPoint="Call",CallingConvention=CallingConvention.Cdecl,ExactSpelling=true)] publicstaticexternvoidCall( refintcount, refIntPtrpArray);
方法调用:
IntPtrpArray=IntPtr.Zero;//数组指针 intcount=0; Call(refcount,refpArray); varrects=newRect[count];//结果数组 for(inti=0;i参考链接:基于C#调用c++Dll结构体数组指针的问题详解
以上这篇C#访问C++动态分配的数组指针(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。