Ce qui pourrait provoquer l'erreur de temps d'exécution Vb6 430
J'ai une dll COM écrit en vb6. Lorsque j'essaie de créer un nouvel objet d'un module de classe de cette dll-je obtenir une minuterie de fonctionnement erreur de 430: une Classe ne prend pas en charge l'automatisation ou ne prend pas en charge l'interface attendue. La chose intéressante est que cela se produit uniquement à partir de l'extérieur de l'IDE, quand je suis débogage à partir de l'IDE, il n'y a pas d'erreur renvoyé et que le nouvel objet de la classe est créée avec succès. Ce qui peut être la cause?
En général je reçois parfois ce genre d'erreurs de dll COM. Quelle est la meilleure façon de déboguer COM questions? Comment puis-je connaître le chemin de la dll qui est utilisé lors de l'exécution d'un programme?
source d'informationauteur Raminder
Vous devez vous connecter pour publier un commentaire.
Si ce projet est entièrement en VB6. La cause probable de cette est que le fichier EXE a une copie de la DLL binaire dans le répertoire. Lorsque vous feu, il utilise cette copie au lieu de le compilé copie. Lorsque vous AJOUTEZ des méthodes ou classes EXE devient incompatible avec l'ancienne DLL. Si vous avez une correction de bug ou simplement travaillé avec l'intérieur du code, puis EXE fonctionne, mais il a utilisé le vieux DLL.
Ensemble de votre fichier DLL pour la Compatibilité Binaire.
Assurez-vous que vous avez un annuaire Compatible.
Mettre la DLL de la Dernière version.
Point de la Compatibilité Binaire de cette DLL.
Assurez-vous que votre EXE compile à son répertoire de projet.
Exécutez le fichier EXE à partir de son répertoire de projet. De cette façon, il va utiliser la DLL que vous avez compilé.
Vous avez besoin d'écrire un utilitaire qui vous permet de compiler chaque projet séparément.
Tester votre configuration à l'aide de Virtual PC ou un autre ordinateur.
Toutes ces étapes vous aidera à éviter l'Enfer des DLL. Mon projet a deux douzaines de ActiveX projets en 6 couches. Quand j'ai adopté le dessus de ma DLL Hell problèmes chuté à presque rien.
Lire sur binaire vs projet compatible.
Si vous avez une dll partagée, vous devez être prudent et utiliser les binaires de façon compatible. De cette façon, VB6 va garder ce même COM la signature ou de l'interface entre les générations. Vous devez disposer d'une copie des DLL VB6 à comparer à d'habitude, j'ai un dossier séparé pour une mise à disposition des fichiers binaires. La restriction de la compatibilité binaire est que vous ne pouvez pas supprimer les propriétés publiques ou de méthodes, et vous ne pouvez pas modifier leurs signatures. Vous pouvez ajouter de nouvelles propriétés et de méthodes.
Utiliser la compatibilité de projet si vous avez à faire des modifications importantes (comme la suppression d'anciennes méthodes publiques) - toutefois, si vous faites cela, vous devrez re-compiler toutes les autres applications qui utilisent la DLL partagée.
Ce n'est presque certainement un problème de contrôle de version, parfois connu comme "l'enfer des DLL".
Le fond, c'est que l' .NET monde est explicitement conçu pour permettre à des interfaces évoluer tout en conservant le même nom. Mais dans le monde COM, les interfaces sont considérés comme immuables.
Lorsque vous travaillez au sein de l'IDE, Visual Studio est la création d'un nouveau COM Interop wrapper pour la dll COM à chaque fois que vous exécutez votre solution. Mais à moins que vous relâchez et remplacer l'ensemble de votre solution de tous les temps, y compris un tout nouveau COM Interop wrapper, vous êtes confronté un problème de gestion des versions, où l' .NET code s'attend à une interface COM, mais de voir un autre.
MODIFIER: Pour une raison quelconque, je suppose que vous tentez d'utiliser le composant COM de un .NET composant. Si l'ensemble de la solution est en fait VB6, puis M. Conley la solution est l'approche recommandée. Voici un bon lien qui étudie le problème.