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.


Anmelden zum Antworten