Как передать массив COM в управляемый код? - PullRequest
2 голосов
/ 07 апреля 2011

У меня есть приложение .Net (в частности, VB, хотя я бы хотел, чтобы это было как можно более независимым от языка), использующее объект COM (созданный в C ++).

Мне нужно реализовать событие в COM, которое передает массив символов из C ++ в .Net.Я думаю, мне нужно преобразовать массив в управляемый массив;Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Это то, что я искал:

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 как есть.

0 голосов
/ 07 апреля 2011

Вы не упоминаете используемые рамки.В основном это будет сводиться к MFC или ATL;В более поздних версиях MFC вы можете смешивать и сопоставлять, поэтому я рекомендую Atl.

Посмотрите шаблон класса Atl CComSafeArray для этой цели.Вы захотите

Однако, не забудьте использовать _bstr_t для переноса строк, если это действительно текст (что позволяет легко выполнять преобразования кодирования ПРАВО без особых усилий).[1]


[1] В наши дни тоже есть CComBstr, но я лично использовал _bstr_t с тех пор и имел большой опыт благодаря конверсиям в / из BSTR, например

...