Массив байт из COM в C#
27.09.2006
|
Odi$$ey |
Здравствуйте, <Аноним>, Вы писали:
А>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.
А>И как эту функцию можно поюзать, например в C#.
COM:
C#:
tlbimp comserver.dll /out:comservernet.dll
А>Подскажите, какой нужен тип для передачи двоичных данных в 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>>
27.09.2006 0 комментариев |