Доступ к COM-интерфейсу методом C ++
Вопрос
И то, и другое:
- Идентификатор 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".