Доступ к методу COM-интерфейса C ++ - PullRequest
1 голос
/ 09 января 2009

Оба:

  • CLSID
  • IID

Указав выше, и используя:

  • CoCreateInstance ()

Для возврата одного неинициализированного объекта класса, указанного в приведенном выше CLSID.

Как я могу получить доступ к методу интерфейса из C ++? Без:

  • 1020 * АТЛ *
  • MFC
  • Просто C ++

После этого я использую CreateInstance ()

У меня проблемы с использованием CreateInstance () - с последним параметром - ppv

Используя oleview, я вижу методы указанного IID выше IID, такие как:

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

Как я могу получить доступ к вышеуказанному? Примеры / руководство - пожалуйста

Привет

Ответы [ 4 ]

5 голосов
/ 09 января 2009

Делая CoCreateInstance, вы получаете указатель на интерфейс. С помощью метода QueryInterface (...) вы можете легко получить указатель на интерфейс другого интерфейса. например.,


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

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


После этого вы получите указатель на IS8Simulation в pSim и через него сможете вызывать методы этого интерфейса. Помните, что вы должны предоставить действительный clsid в вызове CoCreateInstance.

0 голосов
/ 09 января 2009

Вы, вероятно, хотите #import "нечто.dll". Это даст вам объявления C ++ для таких типов, как IS8Simulation, аналогично тому, что будет делать #include "something.h".

0 голосов
/ 09 января 2009
 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

Я попытаюсь описать выше, но где объявлено IS8Simulation - прошу прощения за отсутствие COM понимания

Кроме того, как вызвать метод, ниже, используя plain C ++ :

HRESULT Open([in] BSTR FileName)
0 голосов
/ 09 января 2009

Немного расплывчато, какова реальная проблема. Некоторый код будет полезен. Но чтобы догадаться, нужен ли QueryInterface?

...