2009-08-06 4 views
2

Je suis actuellement en train de développer ce qui est plus ou moins un script qui a besoin d'obtenir des données d'une DLL VB 6 COM. Cette DLL est actuellement utilisée dans un projet MS Word VBA, et elle exporte des classes, etc vers le code VBA. Il est ajouté dans le menu Outils -> Références dans l'éditeur VBA, et je peux voir ses classes dans le navigateur d'objets de VBA. De mes lectures, il est possible d'utiliser une bibliothèque VB6 COM dans VB.NET (ou du moins, elle est censée pouvoir le faire). Comme cela devrait être possible dans VB.NET, et depuis .NET fonctionne sur le CLR, et puisque IronPython le fait, logiquement, je ne peux pas accéder à cette ancienne DLL de IronPython?Comment puis-je utiliser une 'référence' VB6 COM dans IronPython?

J'ai essayé import clr; clr.AddReferenceToFileAndPath(dllpath) dans IronPython, mais je continue d'obtenir 'IOError: le fichier n'existe pas', ce qui est clairement faux.

Si quelqu'un peut me diriger vers l'utilisation d'un objet COM VB6 dans le langage/any/.NET, cela serait grandement apprécié.

Merci! PS: Non, je ne peux pas éditer/voir la source de la DLL COM, c'est la propriété de la 3ème partie. PPS: De toute façon je peux obtenir le nom du GUID/COM; de la DLL?

Répondre

1

Vous devez générer un assemblage de module d'exécution COM Runtime à l'aide de l'outil tlbimp et y ajouter une référence; Les langages qui supportent les attributs .net peuvent faire l'interopération explicitement, mais même là, l'auto-génération de l'encapsuleur est beaucoup plus simple.

L'inspection de l'ensemble d'emballage dans ildasm montre exactement comment la conversion a été effectuée.

+0

Merci! Cela a fonctionné assez bien. J'ai ajouté la référence à l'assembly interop dans IronPython, et tout 'Just Works'! Cela n'arrive généralement jamais :) –

0

Dans n'importe quel langage .NET (dans Visual Studio, vous ne savez pas si IronPython dispose d'un support linguistique complet ou s'il s'exécute uniquement sur le CLR avec .NET Framework?), Accédez simplement à la boîte de dialogue Ajouter une référence. onglet, sélectionnez la bibliothèque (comme dans la boîte de dialogue VB6/VBA) et vous avez terminé. VisualStudio génère ensuite pour vous un assembly interop .NET qui est l'intermédiaire entre la bibliothèque COM et vous pouvez l'utiliser comme s'il s'agissait d'un assembly .NET. Si IronPython est pris en charge dans VisualStudio, c'est probablement ce que vous devriez faire. Sinon, vous devez trouver quel outil de ligne de commande VisualStudio utilise pour générer l'assembly interop (un peu comme WSDL.EXE qu'il utilise lorsque vous ajoutez une référence Web), utilisez cet outil pour générer manuellement l'assembly interop et utiliser cela de IronPython comme vous le feriez avec n'importe quel autre assemblage .NET. Je n'ai pas de détails pour vous maintenant sans vérifier Google/MSDN, car je ne fais que travailler C# dans VisualStudio, donc je n'ai jamais vraiment eu besoin de moi pour le moment.

Questions connexes