我有一個.Net應用程序(特別是VB,雖然我會盡可能使用一個COM對象(使用C++編寫)。如何將COM數組傳遞給託管代碼?
我需要在COM中實現一個事件,它將C++中的char數組傳遞給.Net。我想我需要將數組轉換爲託管數組; 我該怎麼做?
我有一個.Net應用程序(特別是VB,雖然我會盡可能使用一個COM對象(使用C++編寫)。如何將COM數組傳遞給託管代碼?
我需要在COM中實現一個事件,它將C++中的char數組傳遞給.Net。我想我需要將數組轉換爲託管數組; 我該怎麼做?
這就是我一直在尋找:
Private Sub ComEventHandler(ByVal dataPtr As Integer, ByVal size As Integer) Handles myComObject.OnEvent
Dim managedData(0 To size - 1) As Byte
Dim data As IntPtr = dataPtr
If (size = 0) Then
Marshal.Copy(data, managedData, 0, size)
...
End If
...
End Sub
的COM事件傳遞的字符數組,因爲它是。
你沒有提到使用的框架。基本上,它會歸結爲MFC或ATL;隨着更高版本的MFC你可以混合和匹配,所以我建議Atl。
查看Atl's CComSafeArray類模板用於此目的。你需要
但是,如果這真的是文本(使得編碼轉換RIGHT很容易,不費力),請考慮使用_bstr_t
來包裝字符串。 [1]
[1]有CComBstr
過這些天,但我個人從BSTR例如使用_bstr_t因爲回來的路上,並有豐富的經驗,由於轉換到/
感謝您的評論!沒有辦法將指向數據的指針傳遞給.Net並將其轉換爲託管數組?我不是很喜歡安全數組(儘管我不知道CComSafeArary)。這不是文字,而是大量數據(視頻),所以我想避免儘可能多的開銷。 – raven 2011-04-07 11:01:14
你可以使用STL向量; IIRC有ATL適配器與他們合作(但已經很長時間了) – sehe 2011-04-07 12:23:12
非常感謝,sehe。我會盡快查看! – raven 2011-04-07 14:45:49