これはおそらく難解なものかもしれないと私は恐れていますが、いくつかの検索の後、他の誰かがこの問題に遭遇したかどうか疑問に思っていますか?問題は、IMediaEventEx.GetEventメソッドを呼び出すときに、64ビットマシンで実行している場合、'EventCode'パラメーターが常に0を返すことです。同じコードと同様の環境ですが、32ビットマシンで正常に動作します。
このメソッドは、適切なWM_GRAPHNOTIFYメッセージをキャプチャすることによって呼び出されるおなじみの「HandleGraphEvent」メソッド内で呼び出されています。具体的には、ビデオファイルが完了したときに呼び出される「DirectShowLib.EventCode.Complete」メッセージを探しています。前述のように、32ビットシステム(動作中)では、イベントコード/メッセージ「ClockChanged」、「Paused」、最後に「Complete」がこの順序で生成されます。64ビットマシンでは、HandleGraphEventメソッドも3回呼び出されますが、GetEventが呼び出されるたびに、EventCodeは0になります。
他の誰かがこの問題を経験したか、DirectShowLibコードを32ビットから64ビットに移動する際に問題が発生しましたか?
前もって感謝します...
FWIW-コード...
Private Sub HandleGraphEvent()
' This routine handles are notified events from DShow library
Dim hr As Integer
Dim evCode As EventCode
Dim evParam1, evParam2 As Integer
If Me.m_MediaEventEx Is Nothing Then Exit Sub
' Process all the events
While (Me.m_MediaEventEx.GetEvent(evCode, evParam1, evParam1, 0) = 0)
' Cleanup parameters before processing
hr = Me.m_MediaEventEx.FreeEventParams(evCode, evParam1, evParam2)
IsDShowError(hr, "HandleGraphEvent")
' Is this the end of the movie?
If evCode = EventCode.Complete Then
' Is there a movie control availalbe?
If Me.m_MediaControl Is Nothing Or Me.m_MediaSeek Is Nothing Then Return
' Perform Stop Start
hr = Me.m_MediaControl.Stop()
PlayMovie(MoveToNextVideo())
Exit While
End If
End While
End Sub