从 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.