O acesso de um interface COM método C ++
Pergunta
Ambos:
- CLSID
- IID
Depois de ter especificado acima, e usar:
- CoCreateInstance ()
Para retornar um único objeto uninitialised da classe especificada pelo CLSID acima.
Como posso acessar um método da interface do C ++? Sem:
- ATL
- MFC
- Just plain C ++
Depois, eu uso CreateInstance ()
Estou tendo problemas, usando CreateInstance () - com o último parâmetro - ppv
Usando OLEVIEW, eu pode ver métodos da IIDabove IID especificado acima, tais como:
interface IS8Simulation : IDispatch {
HRESULT Open([in] BSTR FileName);
};
Como posso acessar o acima? Exemplos / orientação - por favor
Saudações
Solução
Ao fazer um CoCreateInstance você recebe um ponteiro de interface. Através do método QueryInterface (...) você pode obter o ponteiro de interface de alguma outra interface facilmente. por exemplo.,
IUnknown* pUnk = NULL; HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);
IS8Simulation* pSim = NULL; hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);
Depois de fazer isso, você receberá o ponteiro para IS8Simulation em pSim e através de que você pode chamar métodos dessa interface. Lembre-se que você precisa para fornecer um clsid válido na chamada CoCreateInstance.
Outras dicas
É um pouco vago o que o problema é real. Algum código seria útil. Mas, para dar um palpite, você precisa QueryInterface?
IS8Simulation* pSim = NULL;
hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);
Eu vou tentar o acima, mas foram é IS8Simulation declarada - por favor, excuss minha falta de COM a compreensão
Além disso, como a chamada para o método, a seguir, utilizando C puro ++ :
HRESULT Open([in] BSTR FileName)
Você provavelmente quer #import "something.dll". Isto lhe dará declarações C ++ para tipos como IS8Simulation, semelhante ao que #include "something.h" faria.