DCom OOP Server, Problem Buffer Marshallen
-
Ich habe einen lokalen Server
IDL file[ object, uuid(B619FA30-1CC3-4FEB-B3B7-4A7A81FAD7EA), oleautomation, nonextensible, version(1.0), pointer_default(unique) ] interface IBufferHandler : IUnknown{ [id(1)] HRESULT CopyBuffer([in,out,size_is(Length)] BYTE* pDst, [in,size_is(Length)] BYTE* pSrc, [in] ULONG Length); };
Im Client
#import "TestBufferHandler.tlb" no_namespace int _tmain(int argc, _TCHAR* argv[]) { CComPtr<IUnknown> pBufferHandler; CComPtr<IBufferHandler> iBufferHandler; pBufferHandler.CoCreateInstance( __uuidof( BufferHandler) ); pBufferHandler.QueryInterface( &iBufferHandler); const ULONG size = 100; BYTE *pIn = (BYTE*) CoTaskMemAlloc( size ); BYTE *pOut = (BYTE*) CoTaskMemAlloc( size ); for( ULONG i = 0; i < size; ++ i) { pIn[i] = ((i%2)==0) ? 0xb7 : 0xf7; } HRESULT res = iBufferHandler->CopyBuffer( pOut, pIn, size); return 0; }
Problem:
Der Buffer wird nur als Pointer auf 1 BYTE an den Server gesendet, Ich muss also COM noch sagen das er ein Array weiterleiten soll.
Dies, dachte ich, mach ich mit size_is() in der IDL.
Wie mach ich das?
-
Also...
Ich musste noch gegen die $(ProjectName)PS.lib linken und die dll registrieren.