我担心这可能是一个深奥的问题,但经过一番搜索,我想知道是否有其他人遇到过这个问题?问题是调用 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