Здравствуйте Jack, Вы писали:
J>Как подключиться к событиям СOM-объекта на С++ без ATL??
J>Как это сделать используя только compiler support? (т.е. #import, _com_ptr_t)
J>Делаю импоирт, получяю ДВА класса: _DObj и _DObjEvents.
J>С первым все ясно.
J>Как использовать второй? (Только C++, без ATL или MFC).
IConnectionPointContainer* pCPC = NULL;
IConnectionPoint* pCP = NULL;
IUnknown* pUnk = NULL;
_DObjEvents* ev = NULL;
DWORD dwCook = 0;
//запрашиваем IConnectionPointContainer
hr = m_DObj->QueryInterface(__uuidof(IConnectionPointContainer),(void**)&pCPC);
if (FAILED(hr)){...};
//находим точку соединения
hr = pCPC->FindConnectionPoint(__uuidof(__uuidof(_DObjEvents)), &pCP);
//освобождаем IConnectionPointContainer
pCPC->Release();
if (FAILED(hr)){...};
//Создаем объект
ev = new _DObjEvents;
//запрашиваем его IUnknown
hr = ev->QueryInterface(__uuidof(IUnknown), (void**) &pUnk);
if (FAILED(hr)){...};
//сообщаем серваку что мы готовы
hr = pCP->Advise(pUnk,&dwCook);
//освобождаем точку соединения
pCP->Release();