2010-10-04 5 views
2

J'ai un problème. Lorsque j'importe une DLL COM (VB6) dans mon application C#, tout va bien. Il compile et fonctionne.Problème de référence d'un assemblage dll

Cependant quand j'utilise l'application sur un autre PC, j'ai un message d'erreur:

Unable to cast an object to COM type Installation.VB6FenetreClass Installation._VB6Fenetre interface type. This operation failed because the QueryInterface call on the COM component for the interface with IID {4CD38B1B-45F1-4DC5-910E-3579664306B9} ' failed due to the following error: this interface is not supported (BingTranslated)

Mais je ne comprends pas pourquoi.

Répondre

0

Enfin, j'ai trouvé le problème. Hans et Chuck vous avez raison, le problème est que ma DLL VB6 n'a pas été référencée.

Lorsque je compile ma DLL VB6, Visual Basic 6.0 enregistre ma DLL automatiquement dans la base de registre (Chose que je n'avais pas remarqué auparavant).

Et dans Visual Studio 2005, je n'ai pas vu il y a une référence à ma DLL VB6 parce que lorsque je le référence, VS génère une autre DLL (si le nom de ma DLL est MYDLL, VS génère un Interop.MYDLL .dll).

Donc, je pensais qu'il n'y avait qu'une référence à Interop.MYDLL.dll et pas une référence à MYDLL.dll aussi. En conséquence, nous devons copier la DLL VB6, la DLL .NET sur l'ordinateur client. Ensuite, nous devons enregistrer la DLL VB6 avec la commande suivante:

regsvr32 MYDLL.DLL

2

Bienvenue sur DLL. La version enregistrée sur l'ordinateur que vous testez est différente de la version sur l'ordinateur sur lequel vous développez (ou possède un GUID différent).

2

C'est un signe assez classique de DLL Hell. VB6 génère de nouveaux IID d'interface lorsque le code est modifié. Il est probable que le serveur COM sur le PC cible ne soit pas la même version que celle sur laquelle vous avez construit votre programme.