Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > C/C++: Прочее > Подскажите, как правильно работать с COM (ATL) |
Автор: yasli 30.05.18, 13:10 |
Есть COM-сервер, у этого сервера есть объект App, у объекта App есть метод Start. Сразу получить ID метода Start не получается. GetIDsOfNames возвращает DISP_E_UNKNOWNNAME. Получаю App: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> DISPID id; LPOLESTR string = L"App"; HRESULT r = pConn->GetIDsOfNames(IID_NULL, &string, DISPATCH_PROPERTYGET, LOCALE_USER_DEFAULT, &id);//здесь возвращается S_OK Что-то не пойму теперь, как вызвать метод Start у App. Видел такой код для Builder: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Variant pVar; V_VT(&pVar) = VT_DISPATCH; V_DISPATCH(&pVar) = pIDisp;//IDispatch * Variant ret = Variant(pVar.OlePropertyGet("App")).OleFunction("Start"); Не понятно... |
Автор: Олег М 30.05.18, 13:31 |
Сначала нужно вызвать pConn->Invoke c id, которое тебе вернул GetIDsOfNames. Тебе вернётся указатель на IDispatch. Для него делаешь GetIDsOfNames("Start"), затем Invoke |
Автор: yasli 30.05.18, 14:15 |
Олег М, спасибо! Всё получилось. |