我擔心這可能是一個深奧的,但經過一些搜索後,我想知道是否有其他人遇到過這個問題?問題是,當調用IMediaEventEx.GetEvent方法時,在64位機器上運行時,「EventCode」參數始終返回0。相同的代碼和類似的環境,但在32位機器上工作正常。DirectShowLib 64位返回的IMediaEventEx.GetEvent 0
該方法在通過捕獲適當的WM_GRAPHNOTIFY消息調用的相關的'HandleGraphEvent'方法中被調用。更具體地說,我正在尋找在視頻文件完成時調用的'DirectShowLib.EventCode.Complete'消息。如前所述,在32位系統上(即正在運行),它會按順序生成事件代碼/消息「ClockChanged」,「已暫停」,最後生成「完成」。在64位機器上,HandleGraphEvent方法也被調用三次,但每次調用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
東西是本着一個錯字'GetEvent(evCode,evParam1,evParam1'。你想第三個參數'evParam2'代替,不是嗎? – 2012-04-12 16:38:43
衛生署,感謝擡起頭來! – SeanCocteau 2012-04-13 09:20:14