Массив байт из COM в C#

Odi$$ey Odi$$ey
Здравствуйте, <Аноним>, Вы писали:

А>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.

А>И как эту функцию можно поюзать, например в C#.

COM:

[id(1), helpstring("method GetBinary")] HRESULT GetBinary([out,retval] SAFEARRAY(BYTE) *arr);

STDMETHODIMP CTestInterface::GetBinary(SAFEARRAY* *arr)
{
   BYTE src[] = {1,2,3,4,5,6,7,8,9,10,11};
   LPVOID theBytes = NULL;

   CComSafeArray<BYTE> NewArray(sizeof(src));
   SafeArrayAccessData( *NewArray.GetSafeArrayPtr(), &theBytes );
   memcpy( theBytes, src, sizeof(src) );
   SafeArrayUnaccessData( *NewArray.GetSafeArrayPtr() );

   *arr = NewArray.Detach();

   return S_OK;
}

C#:
tlbimp comserver.dll /out:comservernet.dll

using comservernet;

...
  TestInterface testobj = new TestInterface();
  byte[] arr = testobj.GetBinary();
... << RSDN@Home 1.2.0 alpha rev. 654>>