我有一个.Net应用程序(特别是VB,虽然我认为它可能与语言无关)使用COM对象(用C ++制作)。
我需要在COM中实现一个事件,它将char数组从C ++传递给.Net。我想我需要将数组转换为托管数组; 我怎么能这样做?
答案 0 :(得分:0)
您没有提到使用的框架。基本上,它将归结为MFC或ATL;使用更高版本的MFC,你可以混合搭配,所以我推荐Atl。
为此目的,请查看Atl's CComSafeArray类模板。你需要
但是,如果这是真正的文本,请考虑使用_bstr_t
来包装字符串(这样可以轻松地进行编码转换,而不需要太多努力)。 [1]
[1]这些天也有CComBstr
,但我个人之所以使用过_bstr_t,并且由于往返于BSTR的转换而拥有丰富的经验,例如
答案 1 :(得分: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事件按原样传递char数组。