Вопрос

И то, и другое:

  • Идентификатор CLSID
  • ИИД

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

  • CoCreateInstance() Совместное создание()

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

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

  • ATL
  • МФЦ
  • Просто обычный C ++

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

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

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

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

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

С уважением

Это было полезно?

Решение

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


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

IS8Simulation* pSim = НУЛЬ;hr = pUnk->Интерфейс запроса(__uuidof(IS8Simulation), (void**)&pSim);

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

Другие советы

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

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

Я попытаюсь сделать вышеописанное, но была ли объявлена имитация is8 - пожалуйста, извините мое отсутствие КОМ понимание

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

HRESULT Open([in] BSTR FileName)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top