我目前正在开发一个能够播放Quick Time视频的Windows平台应用程序。 目标操作系统版本是Windows XP,Windows Vista和Windows 7。
我成功使用了Apple ActiveX QuickTime Control 2.0(在C#中),一切都在Windows XP上运行良好。
然而,在Vista和Windows 7上,我遇到了正确处理控件的问题。 以下是“重现步骤”: - 我在运行时动态创建Quick Time控件,然后将其放在面板上;
我用它成功播放视频;
在某些时候我关闭了应用程序主表单;应用程序窗口被销毁,应用程序将继续在后台运行(执行同步视频等操作);此时,使用IDisposable模式处理控件;我无法显式处理Movie对象(来自ActiveX控件),因为我得到一个异常,例如:“已经与其底层RCW分离的COM对象无法使用。”;我只是使用(AxQTOControlLib.AxQTControl)player.Dispose();在Windows XP上,这很好,但不适用于Vista和7
我恢复了我的应用程序(从后台运行的工具栏)并尝试再次打开视频;此时抛出了AccessViolationException“试图读取/写入受保护的内存”;
我的问题是:
为什么这只发生在Vista和Windows 7上?
在XP上是一个隐藏的泄漏?
在运行时创建控件(及其影片对象)时,建议使用哪种方法?
我现在正在使用一个显式的Movie.Disconnect()调用(虽然我现在不知道这个断开是什么意思,因为我找不到合适的文档)在表单关闭之前被QuickTimeTerminate()调用所吞噬。 虽然我的方法正在运行,但它有点破坏设计,所以我想知道更好的方法。
谢谢你, Mosu'
更新: 我刚刚发现我的方法不是workink。我用于玩家:QuickTime控件和Windows Media播放器控件(两者都是ActiveX),当一个人无法播放文件时,使用另一个。我看到WindowsMedia播放器的输出并认为这些方法正在运行。 所以我的修复根本不起作用。
答案 0 :(得分:1)
很多人似乎都有这个错误。
此页面提供了一种有趣的方法:http://www.theusenetarchive.com/usenet-message-how-to-properly-destroy-quicktime-activex-object-10384503.htm
由于文件句柄仍处于打开状态,因此发生崩溃。我曾是 通过连接空字符串从Quicktime控件中“卸载”电影 到FileName或URL属性。 Quicktime无法解决这个问题 正确并保持原始文件打开。所以我连接了 这是一个实际图像文件的路径(Quicktime也是图像) 全黑。 Eveything现在看起来很好。