Pregunta

Ambos:

  • CLSID
  • IID

Habiendo especificado lo anterior y usando:

  • CoCreateInstance()

Para devolver un único objeto sin inicializar de la clase especificada por el CLSID anterior.

¿Cómo puedo acceder al método de una interfaz desde C ++? Sin:

  • ATL
  • MFC
  • Simplemente C ++

Después, uso CreateInstance ()

Tengo problemas al usar CreateInstance () - con el último parámetro - ppv

Utilizando oleview, puedo ver los métodos del IID especificado arriba del IID anterior, como:

interface IS8Simulation : IDispatch {
    HRESULT Open([in] BSTR FileName);
};

¿Cómo puedo acceder a lo anterior? Ejemplos / orientación - por favor

Saludos

¿Fue útil?

Solución

Al hacer una CoCreateInstance obtienes un puntero de interfaz. A través del método QueryInterface (...) puede obtener fácilmente el puntero de la interfaz de alguna otra interfaz. p.ej.,


IUnknown* pUnk = NULL;
HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);

IS8Simulation* pSim = NULL; hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);

Después de hacer esto, obtendrá el puntero a IS8Simulation en pSim y a través de eso podrá llamar a los métodos de esa interfaz. Recuerde que debe proporcionar un clsid válido en la llamada CoCreateInstance.

Otros consejos

Es un poco vago cuál es el problema real. Algún código sería útil. Pero para adivinar, ¿necesita QueryInterface?

 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

Intentaré lo anterior, pero si se declara IS8Simulation, disculpe mi falta de COM comprensión

Además, cómo llamar al método, a continuación, usando C ++ simple :

HRESULT Open([in] BSTR FileName)

Probablemente desee #import " something.dll " ;. Esto le dará declaraciones de C ++ para tipos como IS8Simulation, similar a lo que #include " something.h " haría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top