C#访问C++动态分配的数组指针(实例讲解)

C#访问C++动态分配的数组指针(实例讲解),第1张

概述项目中遇到C#调用C++算法库的情况,C++内部运算结果返回矩形坐标数组(事先长度未知且不可预计),下面方法适用于访问C++内部分配的任何结构体类型数组。当时想当然的用refarray[]传递参数,能计算能分配,但是在C#里

项目中遇到C#调用C++算法库的情况,C++内部运算结果返回矩形坐标数组(事先长度未知且不可预计),下面方法适用于访问C++内部分配的任何结构体类型数组。当时想当然的用ref array[]传递参数,能计算能分配,但是在C#里只得到arr长度是1,无法访问后续数组Item。

C++

接口示例:

voID Call(int *count,Rect **arr){ //….. //重新Malloc一段内存,指针复制给入参,外部调用前并不知道长度,另外提供接口Free内存 //….}

结构体:

Struct Rect{int x;int y;int wIDth;int height;};

C#:

结构体:

Struct Rect{public int x;public int y;public int wIDth;public int height;}

外部DLL方法声明:

 [Dllimport("xxx.dll",EntryPoint = "Call",CallingConvention = CallingConvention.Cdecl,ExactSpelling = true)] public static extern voID Call(     ref int count,ref IntPtr pArray);

方法调用:

IntPtr pArray = IntPtr.Zero; //数组指针int count = 0;Call(ref count,ref pArray);var rects = new Rect[count]; //结果数组for (int i = 0; i < count; i++){var itemptr = (IntPtr)((Int64)Rect + i * Marshal.SizeOf(typeof(Rect))); //这里有人用的UInt32,我用的时候溢出了,换成Int64rects[i] = (Rect)Marshal.PtrToStructure(itemptr,typeof(Rect));}

参考链接:基于C#调用c++Dll结构体数组指针的问题详解

以上这篇C#访问C++动态分配的数组指针(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的C#访问C++动态分配的数组指针(实例讲解)全部内容,希望文章能够帮你解决C#访问C++动态分配的数组指针(实例讲解)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存