2011-04-07 113 views
2

我有一個.Net應用程序(特別是VB,雖然我會盡可能使用一個COM對象(使用C++編寫)。如何將COM數組傳遞給託管代碼?

我需要在COM中實現一個事件,它將C++中的char數組傳遞給.Net。我想我需要將數組轉換爲託管數組; 我該怎麼做?

回答

0

這就是我一直在尋找:

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事件傳遞的字符數組,因爲它是。

0

你沒有提到使用的框架。基本上,它會歸結爲MFC或ATL;隨着更高版本的MFC你可以混合和匹配,所以我建議Atl。

查看Atl's CComSafeArray類模板用於此目的。你需要

但是,如果這真的是文本(使得編碼轉換RIGHT很容易,不費力),請考慮使用_bstr_t來包裝字符串。 [1]


[1]有CComBstr過這些天,但我個人從BSTR例如使用_bstr_t因爲回來的路上,並有豐富的經驗,由於轉換到/

+0

感謝您的評論!沒有辦法將指向數據的指針傳遞給.Net並將其轉換爲託管數組?我不是很喜歡安全數組(儘管我不知道CComSafeArary)。這不是文字,而是大量數據(視頻),所以我想避免儘可能多的開銷。 – raven 2011-04-07 11:01:14

+0

你可以使用STL向量; IIRC有ATL適配器與他們合作(但已經很長時間了) – sehe 2011-04-07 12:23:12

+0

非常感謝,sehe。我會盡快查看! – raven 2011-04-07 14:45:49

相關問題