2011-04-07 86 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

相关问题