2010-10-13 32 views
1

Je dois utiliser un objet ActiveX (QlikOCX.ocx). J'ai donc créé un très petit exemple d'application, qui fonctionne bien, mais quand je ferme l'application, je reçois une erreur comme celle-ci:Delphi - application avec le contrôle activeX provoque "appcrash"

"application.exe ne fonctionne plus -> Recherche en ligne pour une solution et fermer le programm -> fermer le programm

détails du problème: problème-nom_événement: APPCRASH ... »

Je veux savoir s'il est possible d'intercepter cette erreur d'une certaine façon? Merci!

+0

Vous trouverez des informations sur ce contrôle ActiveX à l'adresse http://www.qlikview.com/ ... –

+0

Merci pour ce conseil utile. J'ai vérifié ce site plusieurs fois et aucune information intéressante sur le contrôle ActiveX ne peut être trouvée. – flinkiy1

+0

Eh bien, d'autres pourraient ne pas connaître le contrôle aciveX, donc pour eux, c'est aussi utile. :-) –

Répondre

2

L'erreur que vous obtenez peut avoir de nombreuses causes. Cela peut être un problème dans votre propre code ou dans le contrôle ActiveX. Par exemple, votre processus peut se terminer, mais l'un des threads est toujours en cours d'exécution, l'interrogation d'informations ou autre.
Les chances sont que vous ne libérez pas le contrôle ActiveX correctement, causant ainsi quelque chose qui laisse derrière lui certaines affaires inachevées. Exécuter votre application dans le débogueur pourrait vous fournir l'emplacement de l'erreur, mais les chances sont que c'est un peu plus compliqué. Parfois, sh * t arrive juste ...
Avez-vous créé une petite application console pour tester cet OCX? Ou l'avez-vous importé en tant que composant et l'avez-vous ajouté à un formulaire?
Dans le cas d'une application console, assurez-vous de ne pas utiliser de variable globale pour stocker l'objet OCX! Les objets interfacés globaux ne sont pas toujours libérés correctement.
Si vous utilisez un composant dans un formulaire, ajoutez un événement OnClose sur ce formulaire et ajoutez du code dans cet événement qui doit nettoyer le contrôle OCX. Ne le libérez pas, mais voyez s'il a une fonction "Fermer", "Effacer" ou "Terminer" ou toute autre méthode de nettoyage qui doit être appelée. Et encore, n'utilisez pas de variables globales pour les types basés sur l'interface comme les contrôles OCX.

+0

Salut, merci pour les conseils. J'ai utilisé l'ocx comme composant et l'ai déposé sur un formulaire. J'ai essayé vos conseils, mais sans succès. Je suis sûr que c'est un bug dans le contrôle ActiceX lui-même. Lorsque je crée un objet du contrôle à l'exécution, puis appelez la méthode gratuite, je reçois la même erreur que lorsque je ferme l'application ... – flinkiy1

2

Essayez d'appeler ActiveX.CoFreeUnusedLibraries avant de quitter l'application. Si vous utilisez Delphi plus tôt que le 7.1, voir Quality Central Report#:3272, il y avait un bug.

+0

Salut, merci ce conseil - je l'ai essayé, mais sans succès :( – flinkiy1