項目中遇到C#調用C++算法庫的情況,C++內部運算結果返回矩形坐標數組(事先長度未知且不可預計),下面方法適用于訪問C++內部分配的任何結構體類型數組。當時想當然的用ref array[]傳遞參數,能計算能分配,但是在C#里只得到arr長度是1,無法訪問后續數組Item。
壽光ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
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,我用的時候溢出了,換成Int64 rects[i] = (Rect)Marshal.PtrToStructure(itemptr, typeof(Rect)); }
參考鏈接:基于C#調用c++Dll結構體數組指針的問題詳解
以上這篇C#訪問C++動態分配的數組指針(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持創新互聯。
本文題目:C#訪問C++動態分配的數組指針(實例講解)
文章網址:http://vcdvsql.cn/article2/jhpooc.html
成都網站建設公司_創新互聯,為您提供用戶體驗、品牌網站建設、外貿建站、服務器托管、電子商務、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯