#wpf #com #atl #hwnd #ms-media-foundation
#wpf #com #atl #hwnd #ms-media-foundation
Вопрос:
У меня есть C ATL COM DLL (phew), который предоставляет класс VideoPlayer, который сам инкапсулирует вызовы Windows Media Foundation.
Я использую эту DLL из приложения WPF, в котором я хотел бы отобразить видео в элементе управления.
В моей DLL есть метод с именем Initialize, для которого требуется 2 HWND для MF.
Как я должен объявить эту функцию? Что я должен передать ему в приложении WPF?
На данный момент у меня есть:
VideoPlayer.h
STDMETHOD(Initialize)(
OLE_HANDLE video_hwnd,
OLE_HANDLE event_hwnd
);
VideoPlayer.cpp
STDMETHODIMP VideoPlayer::Initialize(
OLE_HANDLE hVideo,
OLE_HANDLE hEvent
)
{
m_hwndVideo = (HWND) (DWORD_PTR)hVideo;
m_hwndEvent = (HWND) (DWORD_PTR)hEvent;
}
Приложение WPF:
private void Button_Click(object sender, RoutedEventArgs e)
{
var handle = new WindowInteropHelper(this).Handle.ToInt32();
videoPlayer = new EmideeMediaFoundationLib.VideoPlayer();
videoPlayer.Initialize( handle, handle );
}
Я получаю правильные значения в функции инициализации, но преобразование в HWND завершается неудачей…
Есть идеи?
Заранее спасибо
Майк
Комментарии:
1. Рассмотрим, как интерфейсы IOleXXX обмениваются HWND. msdn.microsoft.com/en-us/library/windows/desktop /…
2. Довольно неясно, как выглядит сбой. Пока вы подключаете его к int32, вам лучше убедиться, что ваш проект нацелен на платформу x86.
3. На данный момент это только x86, но я планирую перенести его на x64 позже. Должен ли я вместо этого преобразовать его в Int64?