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.idlund 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 CLSIDvielleicht 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?