Accedere a un metodo di interfaccia COM C ++
Domanda
Entrambi:
- CLSID
- IID
Dopo aver specificato quanto sopra e utilizzando:
- CoCreateInstance ()
Per restituire un singolo oggetto non inizializzato della classe specificata dal CLSID sopra.
Come posso quindi accedere al metodo di un'interfaccia da C ++? Senza:
- ATL
- MFC
- Semplicemente C ++
Successivamente, utilizzo CreateInstance ()
Sto riscontrando problemi, usando CreateInstance () - con l'ultimo parametro - ppv
Usando oleview, posso vedere i metodi dell'IID specificato sopra IID sopra, come ad esempio:
interface IS8Simulation : IDispatch {
HRESULT Open([in] BSTR FileName);
};
Come posso accedere a quanto sopra? Esempi / indicazioni - per favore
Saluti
Soluzione
Eseguendo un CoCreateInstance si ottiene un puntatore all'interfaccia. Tramite il metodo QueryInterface (...) è possibile ottenere facilmente il puntatore all'interfaccia di un'altra interfaccia. per esempio.,
IUnknown* pUnk = NULL; HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);
IS8Simulation* pSim = NULL; hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);
Dopo aver fatto questo, otterrai il puntatore a IS8Simulation in pSim e attraverso questo puoi chiamare i metodi di quella interfaccia. Ricorda che devi fornire un clsid valido nella chiamata CoCreateInstance.
Altri suggerimenti
È un po 'vago quale sia il vero problema. Qualche codice sarebbe utile. Ma per indovinare, hai bisogno di QueryInterface?
IS8Simulation* pSim = NULL;
hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);
Proverò quanto sopra, ma dove viene dichiarata la IS8Simulation - si prega di scusare la mia mancanza di COM comprensione
Inoltre, come chiamare il metodo, di seguito usando C ++ semplice :
HRESULT Open([in] BSTR FileName)
Probabilmente vuoi #import " something.dll " ;. Questo ti darà dichiarazioni C ++ per tipi come IS8Simulation, simile a ciò che #include "qualcosa.h". farebbe.