在做視覺檢測,使用Halcon做影像處理。現在使用WPF做界面,然后把影像處理的部分放入C++封裝的dll里。
現在有一個問題,就是我需要在C#和C++之間傳遞Halcon的影像變數,例如HObject等。
一些我自定義的結構體DetectParaRun,我能通過在C#里,申請一定非托管記憶體,然后將IntPtr傳遞給C++。

C++那邊使用無型別指標接收,再轉換成DetectParaRun型別,實作結構體傳遞。
但是這個前提是C++和C#兩邊的結構體是相同,可獲得大小的。
而HObject是Halcon里的型別,本身定義我不知道,在C++和C#里結構是否一樣也不清楚。
使用Marshal.SizeOf()也無法獲取HObject實體的大小。
有大神指點一下,如何把這種第三方庫封裝的資料型別,從C#傳遞給C++?
uj5u.com熱心網友回復:
HObject一般是Halcon回呼的時候傳給你的。你可以把收到的HObject再傳給Halcon,而不是自己去創建一個HObject。uj5u.com熱心網友回復:
能稍微再詳細一點嗎?我不太懂
uj5u.com熱心網友回復:
可行的辦法:把C++物件中的影像指標傳遞到C#中構造新的HObject
大概率可行的辦法:
把C#的Key
public IntPtr Key { get; }
傳遞到C++,構造副本
explicit HObject(Hkey key, bool copy=true);
uj5u.com熱心網友回復:
這位仁兄,你是在封裝演算法庫吧,我這半年的主要任務就是這個,你不會是我同事吧,哈哈哈,這個很簡單哪,要么直接定義自己的影像結構體,要么在庫中開辟一個堆區,將地址傳給c#呼叫,另外動態開辟記憶體的原則是誰開辟誰釋放(庫的堆區和exe的堆區不一定可以相互訪問,所以最好追尋此原則),關于釋放也很簡單,直接在庫中封裝一個函式給c#呼叫來釋放轉載請註明出處,本文鏈接:https://www.uj5u.com/net/29686.html
標籤:C#
下一篇:C# 班長五人競選,考慮平票。
