2010-03-15 80 views
3

我目前正在開發一個Windows平臺的應用程序,它將能夠播放快速時間視頻。 目標操作系統版本是Windows XP,Windows Vista和Windows 7.正確處置QuickTime控件

我成功地使用了Apple ActiveX QuickTime Control 2.0(在C#中),並且在Windows XP上一切正常。

但是,在Vista和Windows 7上,我正面臨着正確處置控制的問題。 以下是「重現步驟」: - 我在運行時動態創建快速時間控件,並將其放置在面板上;

  • 我成功地用它播放視頻;

  • 在某些時候,我關閉了應用程序的主窗體;應用程序窗口被銷燬,應用程序將繼續在後臺運行(執行像同步視頻之類的操作);此時控制使用IDisposable模式進行處理;我無法顯式地處理Movie對象(來自ActiveX控件),因爲我得到如下異常:「與其基礎RCW分離的COM對象無法使用。」;我只是使用(AxQTOControlLib.AxQTControl)player.Dispose();在Windows XP上這是好的,但不是在Vista和7

  • 我恢復我的應用程序(從它在後臺運行的工具欄),並嘗試再次打開視頻;此時會引發AccessViolationException「嘗試讀取/寫入受保護的內存」;

我的問題是:

  • 這究竟是爲什麼只能在Vista和Windows 7?

  • 在XP上是一個隱藏的泄漏?

  • 什麼是在運行時創建控件(使用它的電影對象)時推薦的方式?

由QuickTimeTerminate()調用之前休耕的形式是

現在我使用一個明確的Movie.Disconnect()調用(雖然我不現在這是什麼意思脫節,因爲我無法找到適當的文件)關閉。 雖然我的方法正在工作,但它是一種設計突破,所以我想知道一個更好的方法來做到這一點。

謝謝 Mosu」

更新: 我剛剛發現我的方法不workink。我用於玩家:QuickTime控制和Windows媒體播放器控制(都是ActiveX),當一個播放文件失敗時使用另一個文件。我看到了WindowsMedia播放器的輸出並且認爲這些方法正在工作。 所以我的修復程序根本不起作用。

+0

Yu,相當不好的控制。嘗試隱藏您的表單而不是處置它。 – 2010-03-15 16:23:54

+0

感謝您的回覆。我不能這樣做,因爲所有其他控件(包括控件所在的面板)都正在處理中。 應用程序處於成熟狀態。我被要求添加這個功能。所以這不是一個選項。 – mosu 2010-03-15 17:09:13

+0

不幸的是我有同樣的問題 – 2012-10-10 16:51:38

回答

1

很多人似乎都有這個錯誤。

本頁面提供了一個有趣的方法:發生http://www.theusenetarchive.com/usenet-message-how-to-properly-destroy-quicktime-activex-object-10384503.htm

崩潰,因爲文件句柄,仍然是開放的。 我是 通過將空字符串 連接到FileName或URL屬性從Quicktime控件「卸載」電影。   Quicktime不正確處理此 並保留原始文件處於打開狀態。  因此,我將 連接到實際圖像文件(Quicktime也是圖像)的路徑爲 全黑。   Eveything現在看起來很好。