如何将COM数组传递给托管代码?

时间:2011-04-07 09:25:09

标签: .net c++ vb.net com interop

我有一个.Net应用程序(特别是VB,虽然我认为它可能与语言无关)使用COM对象(用C ++制作)。

我需要在COM中实现一个事件,它将char数组从C ++传递给.Net。我想我需要将数组转换为托管数组; 我怎么能这样做?

2 个答案:

答案 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数组。