从 VB6 使用 DirectShow IMediaEvent.GetEvent
Using DirectShow IMediaEvent.GetEvent from VB6
我知道我正在回到过去,但我确实需要 VB6 的帮助 (-:
我正在尝试使用 DirectShow 无缝循环播放视频,如 this link 中针对 VB6 所记录的那样。由于没有内部循环实现,我正在寻找完成并寻找回到位置 0。
为了查看完成情况,我使用 IMediaEvent.SetNotifyWindow
设置了一个事件处理程序。据我了解,当此事件弹出时,我必须使用 .GetEvent
遍历所有排队的事件,直到事件队列为空,检查感兴趣的事件 (EC_COMPLETE or EC_END_OF_SEGMENT
).
但我不知道事件队列何时为空。文档似乎暗示 .GetEvent
将 return 发生这种情况时的错误代码,但根据 VB6 属性查看器 .GetEvent
是一个 Sub(无效函数),因此它不能return输入错误代码。
怎么办?这还能如何工作?
您的理解是正确的。 C++ GetEvent
returns E_ABORT
用于空队列,这是您应该看到的以结束尝试获取事件。
在 VB6 中,错误应该转换为 VB6 运行时错误。所以你没有看到 return 值(Sub)并且你应该准备好 - 通常零超时 - 处理错误(On Error Goto...
,我想):
If no event is on the queue, this method waits up to msTimeout milliseconds for one to arrive. If the time-out expires, the method raises run-time error 287.
我知道我正在回到过去,但我确实需要 VB6 的帮助 (-:
我正在尝试使用 DirectShow 无缝循环播放视频,如 this link 中针对 VB6 所记录的那样。由于没有内部循环实现,我正在寻找完成并寻找回到位置 0。
为了查看完成情况,我使用 IMediaEvent.SetNotifyWindow
设置了一个事件处理程序。据我了解,当此事件弹出时,我必须使用 .GetEvent
遍历所有排队的事件,直到事件队列为空,检查感兴趣的事件 (EC_COMPLETE or EC_END_OF_SEGMENT
).
但我不知道事件队列何时为空。文档似乎暗示 .GetEvent
将 return 发生这种情况时的错误代码,但根据 VB6 属性查看器 .GetEvent
是一个 Sub(无效函数),因此它不能return输入错误代码。
怎么办?这还能如何工作?
您的理解是正确的。 C++ GetEvent
returns E_ABORT
用于空队列,这是您应该看到的以结束尝试获取事件。
在 VB6 中,错误应该转换为 VB6 运行时错误。所以你没有看到 return 值(Sub)并且你应该准备好 - 通常零超时 - 处理错误(On Error Goto...
,我想):
If no event is on the queue, this method waits up to msTimeout milliseconds for one to arrive. If the time-out expires, the method raises run-time error 287.