【发布时间】:2011-07-31 12:48:22
【问题描述】:
我有一个使用 COM 对象(用 C++ 制作)的 .Net 应用程序(特别是 VB,尽管我希望它尽可能与语言无关)。
我需要在 COM 中实现一个将 char 数组从 C++ 传递到 .Net 的事件。我想我需要将数组转换为托管数组; 我该怎么做?
【问题讨论】:
标签: .net c++ vb.net com interop
我有一个使用 COM 对象(用 C++ 制作)的 .Net 应用程序(特别是 VB,尽管我希望它尽可能与语言无关)。
我需要在 COM 中实现一个将 char 数组从 C++ 传递到 .Net 的事件。我想我需要将数组转换为托管数组; 我该怎么做?
【问题讨论】:
标签: .net c++ vb.net com interop
你没有提到使用的框架。基本上,它会归结为 MFC 或 ATL;使用更高版本的 MFC 你可以混搭,所以我推荐 Atl。
查看Atl's CComSafeArray 用于此目的的类模板。你会想要的
但是,如果这真的是文本,请考虑使用_bstr_t 来包装字符串(这样可以轻松地进行编码转换,无需太多努力)。 [1]
[1] 这些天也有CComBstr,但我个人从很久以前就开始使用 _bstr_t 并且由于与 BSTR 之间的转换而获得了丰富的经验,例如
【讨论】:
这就是我要找的东西:
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 数组。
【讨论】: