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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top