2010-03-15 15 views
3

Je suis en train de développer une application pour plate-forme Windows qui sera capable de lire des vidéos Quick Time. Les versions d'OS ciblées sont Windows XP, Windows Vista et Windows 7.Disposer correctement du contrôle QuickTime

J'ai utilisé avec succès l'Apple ActiveX QuickTime Control 2.0 (en C#) et tout fonctionne bien sur Windows XP.

Cependant, sur Vista et Windows 7, je suis confronté à des problèmes de mise au rebut de la commande. Voici les "étapes à reproduire": - Je crée dynamiquement le contrôle Quick Time au moment de l'exécution et je le place sur un panneau;

  • Je réussis à lire des vidéos avec;

  • À un certain point, je ferme le formulaire principal d'application; les fenêtres de l'application sont détruites et l'application continue à fonctionner en arrière-plan (en effectuant des opérations comme la synchronisation de vidéos); à ce stade, le contrôle est disposé en utilisant un motif IDisposable; Je ne peux pas disposer explicitement l'objet Movie (à partir du contrôle ActiveX) car j'obtiens une exception comme: "L'objet COM qui a été séparé de son RCW sous-jacent ne peut pas être utilisé."; Je viens d'utiliser (AxQTOControlLib.AxQTControl) player.Dispose(); Sous Windows XP c'est bien mais pas sur Vista et 7

  • Je restaure mon application (à partir de la barre d'outils où elle était en arrière-plan) et j'essaie d'ouvrir à nouveau la vidéo; À ce stade, une exception AccessViolationException "Tentative de lecture/écriture de la mémoire protégée" est levée;

Mes questions sont les suivantes:

  • Pourquoi cela se produit uniquement sur Vista et Windows 7?

  • Sur XP est une fuite cachée?

  • Quelle est la méthode recommandée pour éliminer le contrôle (avec son objet vidéo) lors de sa création au moment de l'exécution?

J'utilise maintenant un Movie.Disconnect explicite() d'appel (bien que je fais maintenant pas ce que cela signifie déconnexion parce que je ne pouvais pas trouver de la documentation appropriée) par un appel mises en jachère QuickTimeTerminate() avant que le formulaire est fermé. Pendant que ma méthode fonctionne, c'est une sorte de design qui se casse, donc j'aimerais savoir comment le faire.

Merci, Mosu »

Mise à jour: Je viens de découvrir que ma méthode ne WorkInk. J'utilise les lecteurs: le contrôle QuickTime et le contrôle du lecteur Windows Media (tous deux ActiveX) et quand on ne joue pas un fichier, l'autre est utilisé. Je voyais la sortie du lecteur WindowsMedia et je pensais que les méthodes fonctionnaient. Donc, mon correctif ne fonctionne pas du tout.

+0

Yuck, un contrôle assez minable. Essayez de cacher votre formulaire au lieu de le jeter. –

+0

Merci pour votre réponse. Je ne peux pas faire cela parce que tous les autres contrôles (y compris le panneau sur lequel le contrôle est assis) sont éliminés. L'application est dans un état mature. On m'a demandé d'ajouter ces fonctionnalités. Donc ce n'est pas une option. – mosu

+0

J'ai malheureusement le même problème –

Répondre

1

Beaucoup de personnes semblent avoir cette erreur.

Cette page offre une approche intéressante: http://www.theusenetarchive.com/usenet-message-how-to-properly-destroy-quicktime-activex-object-10384503.htm

L'accident se produit en raison de descripteurs de fichiers étant toujours ouvert.  J'étais 'déchargeant' des films du contrôle Quicktime en câblant une chaîne nulle à la propriété FileName ou URL.   Quicktime ne gère pas ce correctement et laisse le fichier d'origine ouvert.   Donc, à la place, j'ai câblé un chemin vers un fichier d'image réelle (Quicktime fait aussi des images) qui était tout en noir.   Tout semble bien maintenant.