Runtime error 430 [Résolu]

Signaler
Messages postés
33
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2006
-
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
-
Salut,
j'utilise dans mon projet vb.net une librairie (creee avec vb6) pour utiliser le port serie du PC. Lorsque je l'instancie il n'y a pas de pb mais quand je veux supprimer l'objet creer en faisant myLibrairy = Nothing, j'obtiens un runtime error 430 class does not support automation or does not support expected interface.
A la compilation je n'ai pourtant aucun pb. Est ce aue cela viendrai du fait que je ne registre pas le composant?

Est ce que qqun aurait une idee pour resoudre se pb?
Merci d'avance

9 réponses

Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Je t'en pries, c'était un plaisir partagé!

si tu veux "Accepter la réponse", ne serait-ce que parce qu'elle contient des infos intéressantes, n'hésites pas!

à+, (quand j'aurais des question en .Net)


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut phanoudev,

il peut y avoir plusieurs raisons à ton problème :

- Pas d'erreur à la compilation, c'est normal, si c'est une liaison tardive (CreateObject(), et déclaration As Variant ou Object).
- le fait que l'erreur se déclenche quand tu libère la référence est plus curieux, sauf si tu es en train de tester l'implantation de ton objet et que tu n'as encore utilisé aucune méthode ou propriété de celui-ci.
En effet, aussi bizarre que cela puisse paraître, il peut ne pas exposer Automation (m'enfin bon, s'il est vraiment fait en VB, à part un exe standard, pas beaucoup de chance). Ceci dit, es-tu totalement sûr qu'il est réalisé en VB (si tu as le Dependency Walker de Microsoft, vérifies qu'il référence la MSVBVM60.dll)? As-tu une documentation sur son utilisation?
- Enfin, oui, essayes de le registrer, ça peut aider. Mais avant de le faire, je te conseille de le dé-registrer avant, il est possible que cela provienne d'un changement de version de cet objet (en particulier si c'était un exe ActiveX et qu'il est devenu dll ActiveX ou vice-versa).

Quelqu'un aura peut-être plus précis comme explication?
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
33
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2006
1
Salut rvblogn,
Merci pour tes explications, ca eclairci le sujet de mon point de vue. En fait je suis bien sur que la ref est en vb parce que j'ai la source (mais pas de doc). Par contre elle a bien ete compile en fichier exe et non dll et l'interop que j'ai est une dll avec des version differentes donc la deuxieme explication est peut etre la solution, je vais modifier mon projet de deploiement pour qu'il registre cette reference. Si qqun a d'autre explication elles sont les bienvenues.

Merci de ton aide
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut phanoudev,

Si c'est la 2ème,
il te faut impérativement dé-registrer avant de registrer (si tu vas voir dans la base de registres, Windows croit qu'il y 2 serveurs), car VB se base sur ce qu'il trouvera dans la base de registres pour voir s'il est nécessaire de mettre à jour les infos de registration, et la situation devrait faire qu'il trouvera que non (CLSID conservé à cause de compatibilité des projets, IID est nouveau, et si c'est l'exe que tu veux utiliser, par défaut, la création d'instance prendra le in-process server, avec le mauvais IID)!

à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
33
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2006
1
salut,
j'ai essaye de supprimer la cle dans le base de registre et j'ai reinstaller mon prog , malheureusement sa ne resoud pas mon pb, comment etre sur d'avoir enlever tout ce qui concerne la lib dans le bese de registre? j'ai essaye regsrv32 /u mais il me dit qu'il ne trouve rien a desinstaller... Une autre idee?

Merci bien
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Mouais, on arrive trop tard?

cherches le CLSID, le GUID ou le ProgID (machin.truc) dans la base, ou même le nom de l'exe (et de la dll).

en fait, pour dé-registrer, il faudrait aussi connaitre le chemin de la précédente registration.


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
33
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2006
1
j'ai supprime tout ce aui concernait cette lib, et quand j'ai reinstqller mon projet il ne fonctionnait plus, lors de l'appel d'une fonction de la Interop en dll lui renvoie toujours -1, il avait bien registrer la nouvelle dll mais ca fonctionne encore moins bien. J'ai donc reinstaller l'ancienne version et la je retombe sur la run time error 430. C'est la galere. Si tu as une solution miracle je suis preneur.

Merci de ton aide
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Bon allez,
comme ça, de tête (je suis un peu à cheval sur plusieurs post, mais ton problème m'intéresse) :
- Essayes d'utiliser ton composant à partir d'un projet VB6 bidon.
- Essayes de faire pareil, mais en utilisant ton composant non compilé :
tu ouvres ton projet VB6 composant, tu vérifies que propriétés de démarrage "attendre la création du composant". Après (et seulement après), tu ouvres une autre instance de VB6, crées un projet bidon, ajoute la référence à ton composant (VB va prendre celle que ton autre instance est en train d'exposer), et manipule ton composant (si tu mets un point d'arrêt dans le code de ton composant, tu dois y passer), et regardes ce qui cloche.
- Essayes la même chose, mais avec un projet bidon sous VB.Net (s'il y arrive, ah oui, parce que je t'ai pas dit, mais je fais très peu de .Net)

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
Messages postés
33
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2006
1
Enfin...
En fait apres mainte expertise j'ai note qu'il y a avait 2 executable pour cette lib monexe et monexe_1, moi j'utilisait monexe et l'ancienne appli utilise monexe_1. le premier doit avoir un pb. Maintent je n'ai plus d'erreur 430 quand il ferme la lib ouff... Bon il ne me reste plus qu'a fiare correctement mon projet de setup parce que il ne registre pas la dll interop correctement donc je suis oblige de le faire manuellement et c pas terrible pour les utilisateurs ;-)
Mon pb dans cette conversion parce que c'est un projet vb6 que j'ai passe en vb.net mais j'ai garde qq lib vb6, mon pb c que je n'ai pas vb6 donc je ne peut pas tester l'ancien code pas a pas...
Bref le probleme est resolu et c'est le principal. Merci bien pour ton aide, j'ai appris pas mal de chose sur la base de registre... Merci pour le temps consacre

A+