Ich fürchte, diese vielleicht eine esoterischen ein, aber nach einiger Suche Ich frage mich, ob jemand dieses Problem gestoßen? Das Problem besteht darin, dass beim Aufruf der IMediaEventEx.GetEvent-Methode der Parameter 'EventCode' immer 0 zurückgibt, wenn er auf einer 64-Bit-Maschine ausgeführt wird. Der gleiche Code und ähnliche Umgebung, aber auf einer 32-Bit-Maschine funktioniert gut.DirectShowLib IMediaEventEx.GetEvent auf 64-Bit-Rückkehr 0
Dieses Verfahren wird innerhalb des familar ‚HandleGraphEvent‘ Methode aufgerufen, die von der Erfassung der entsprechenden WM_GRAPHNOTIFY Nachricht aufgerufen wird. Genauer gesagt suche ich nach der 'DirectShowLib.EventCode.Complete'-Nachricht, die aufgerufen wird, wenn eine Videodatei abgeschlossen ist. Wie bereits erwähnt, erzeugt es auf 32-Bit-Systemen (das funktioniert) den Ereigniscode/die Nachricht 'ClockChanged', 'Paused' und schließlich 'Complete' in dieser Reihenfolge. Auf der 64-Bit-Maschine wird die HandleGraphEvent-Methode auch dreimal aufgerufen, aber jedes Mal, wenn GetEvent aufgerufen wird, ist der EventCode 0.
Hat jemand anderes dieses Problem oder Probleme beim Verschieben von DirectShowLib-Code von 32-Bit zu erfahren 64-Bit?
Vielen Dank im Voraus ...
FWIW - der Code ...
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
Etwas, das Sie vielleicht auch überprüfen möchten, ist ein Tippfehler in Zeile 'GetEvent (evCode, evParam1, evParam1'. Sie wollten dritten Argument' evParam2' stattdessen, oder? –
Doh, danke für die Köpfe hoch! – SeanCocteau