Ситуация такая...
Есть движок который умеет работать с DirectShow (стротиь графы, добавлять/удалять фитры и т.д.). Проект сделан как DLL с использованием СОМ.
Есть другой проект "ЮнитТест". В котором на диалоге нужно отобразить видео.
Для отобрадения видео, создается отдельное окно и запоминается его HWND (m_hwndVideo).
потом, по-идее, идет следующий код (из ЮнитТеста):
HRESULT hr = E_FAIL;
m_spIVideoEngine->CreateGraph(); // строим граф
CComPtr<IUnknown> spIUnknown;
hr = m_spIVideoEngine->GetIVideoWindow(&spIUnknown); // берем IUnknown который вернул движок
hr = spIUnknown->QueryInterface(IID_IVideoWindow, (void**) &m_spIVideoWindow);
CRect m_render_rect;
::GetWindowRect(m_hwndVideo, &m_render_rect);
hr = m_spIVideoWindow->put_Owner((OAHWND)m_hwndVideo);
hr = m_spIVideoWindow->put_WindowStyle(WS_CHILD);
hr = m_spIVideoWindow->SetWindowPosition(0, 0, m_render_rect.Width(), m_render_rect.Height());
hr = m_spIVideoWindow->put_MessageDrain((OAHWND)m_hwndVideo);
hr = m_spIVideoWindow->put_Visible(-1);
m_spIVideoEngine->Start();
В движке получаем IVideoWindow
STDMETHODIMP CVideoEngine::GetIVideoWindow(IUnknown** ppVideoWindow)
{
return m_spIGraphBuilder->QueryInterface(IID_IVideoWindow, (void**)ppVideoWindow);
}
все вроде бы ок, НО
уже начиная с медода m_spIVideoWindow->put_Owner возвращает ошибку
E_NOINTERFACE
Может кто знает в чем причина?
Спасибо.