c header von vb control



  • juuuhuu funzt... danke

    nochmal zurück zu

    /* [id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *OpenForWriting )(  
                _CK_TFILE_IO __RPC_FAR * This, 
                /* [in] */ BSTR sCompleteFilename, 
                /* [retval][out] */ long __RPC_FAR *__MIDL_0014);
    

    was muss ich hier zuerst erstellen damit der aufruf klappt?
    und was is der erste parameter?



  • wie is eigentlich die reihenfolge beim setup?

    verfügbar:

    //eigene
    typedef struct _FastDicVtbl
    interface _FastDic
    
    //system
    STDMETHODCALLTYPE __RPC_FAR *QueryInterface
    STDMETHODCALLTYPE __RPC_FAR *AddRef
    STDMETHODCALLTYPE __RPC_FAR *Release
    STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount 
    STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo
    STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames
    STDMETHODCALLTYPE __RPC_FAR *Invoke
    
    //IDS
    const IID LIBID_dh_Dictionary = {0x96622ECD,0xB72A,0x49EA,{0x8E,0xDB,0x50,0xC0,0x21,0xAB,0x2C,0x3D}};
    const IID IID__FastDic = {0x08CBE937,0xCEB0,0x4A14,{0xA2,0xF7,0x04,0x7D,0x7E,0x58,0x55,0x2D}};
    const CLSID CLSID_FastDic = {0x30645B3B,0xE815,0x42C6,{0x9A,0xC8,0x9C,0x3F,0x41,0xC5,0xEF,0x91}};
    class DECLSPEC_UUID("30645B3B-E815-42C6-9AC8-9C3F41C5EF91")
    FastDic;
    

    der ansatz geht jedenfalls voll daneben

    _FastDic FD;
    FD.lpVtbl=new _FastDicVtbl;
    void* VPtr=(void*)FD.lpVtbl;
    
    if(S_OK==FD.lpVtbl->QueryInterface(&FD,IID__FastDic,&VPtr))
         return TRUE;
    

    mir is nich ganz klar was der genau für daten haben will



  • Du kannst COM-Objekte nicht als Autovariablen und auch nicht mit new erstellen. Wenn du die OLE-Wrapperklassen benutzt, die dir der Klassenassistent erstellt, dann musst du CreateDispatch verwenden. Benutzt du COM "einfach so", brauchst du CoCreateInstance.



  • ok cocreateinstance gibt jetzt ok zurück

    CoCreateInstance(CLSID_FastDic,NULL,CLSCTX_ALL,IID__FastDic,(void**)&FD);
    

    aber wenn ich jetzt ne methode aufrufe stürzts gleich wieder ab
    fehlt noch was?



  • Was ist FD? Immer noch ein _FastDic-Objekt?

    Der letzte Parameter muss die Adresse eines Zeigers auf den Interfacetyp sein, dessen IID du als vierten Parameter übergibst.



  • dann müsste es doch stimmen oder?

    interface _FastDic
    {
         CONST_VTBL struct _FastDicVtbl __RPC_FAR *lpVtbl;
    };
    


  • Sovok schrieb:

    interface _FastDic
    {
         CONST_VTBL struct _FastDicVtbl __RPC_FAR *lpVtbl;
    };
    

    Wo hast du eigentlich diese eigenartigen Konstrukte her? So was habe ich noch nie gesehen. Hast du die OLE-Wrapper erstellt oder importierst du die tlb direkt in C++?



  • 1. ole/com viewer öffnen
    2. File->View TypeLib->dll/ocx auswähln
    3. speichern unter-> dateiname.idl
    4. Konsole öffnen-> "MIDL /header dateiname-out.h dateiname-in.idl

    und dann erstellt der mir ne .h und ne .c

    kennst du n besseren weg? ich hab in dem fall nix ausser die .dll



  • CoCreateInstance
    Creates a single uninitialized object of the class associated with a specified CLSID

    vielleicht muss ichs einfach noch initialisiern... aber wie?!?



  • edit: die exception tritt übrigends in der dispatch.exe auf.
    brauch ich noch nen dispatcher wenn ichs mit cocreateinstance erstellt hab?


Anmelden zum Antworten