Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
Олег М, спасибо!
Всё получилось.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)