На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Подскажите, как правильно работать с COM (ATL)
    Есть COM-сервер, у этого сервера есть объект App, у объекта App есть метод Start.
    Сразу получить ID метода Start не получается. GetIDsOfNames возвращает DISP_E_UNKNOWNNAME.

    Получаю App:
    ExpandedWrap disabled
      DISPID id;
      LPOLESTR string = L"App";
      HRESULT r = pConn->GetIDsOfNames(IID_NULL, &string, DISPATCH_PROPERTYGET, LOCALE_USER_DEFAULT, &id);//здесь возвращается S_OK

    Что-то не пойму теперь, как вызвать метод Start у App.
    Видел такой код для Builder:
    ExpandedWrap disabled
      Variant pVar;
       
      V_VT(&pVar) = VT_DISPATCH;
      V_DISPATCH(&pVar) = pIDisp;//IDispatch *
       
      Variant ret = Variant(pVar.OlePropertyGet("App")).OleFunction("Start");

    Не понятно...
      Сначала нужно вызвать pConn->Invoke c id, которое тебе вернул GetIDsOfNames. Тебе вернётся указатель на IDispatch. Для него делаешь GetIDsOfNames("Start"), затем Invoke
        Олег М, спасибо!
        Всё получилось.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0240 ]   [ 16 queries used ]   [ Generated: 29.03.24, 13:39 GMT ]