2013-04-12 7 views
-1

J'ai créé une bibliothèque de classes VS 2010. Marqué l'assemblage pour Com Visibility. Signé l'assemblée avec une clé forte. Créer ma classe, avoir ma méthode de point d'entrée disponible.La classe COMVisible dans l'assembly VS 2010 n'est toujours pas visible via com

La bibliothèque fonctionne correctement à partir d'un projet de test en C#.

Je regasm la bibliothèque de classes à gac, via: c: \ windows \ microsoft.net \ Framework \ v4.0.30319 \ regasm Testdll.dll/TLB: testdll.tlb/codebase

Inclure le fichier TLB comme référence dans mon projet VB6. Je le trouve à travers les ressources 'parcourir' donc c'est là.

Lorsque j'essaie d'instancier la classe ... c'est vide. la méthode publique qui devrait être disponible via la classe publique ne s'affiche pas.

Dim objTest as testdll.testclass 
set objTest = new testdll.testclass 

objTest.testmethod <--- this 'testmethod' doesn't display in intellisense... nothing does. 

En plus j'ai essayé d'appeler le « testdll.testclass » via CreateObject, je reçois l'erreur « Le composant ActiveX ne peut pas créer un objet »

Maintenant, j'ai d'autres projets que j'ai fait pour la visibilité COM et j'ai essayé de comparer la différence, mais je n'en vois pas. Je ne peux pas comprendre pourquoi ça ne marche pas.

Des indices? tx beaucoup.

+0

Avez-vous REGSVR32 le .tlb? Je ne comprends pas non plus intellisense, mais je peux toujours utiliser le type. – ken

+0

hmmm ... dois-je ajouter une interface? Je n'ai pas fait ça dans mes autres projets, et ça marche ... Je lis un autre article qui en dit quelque chose. – user1161137

+0

vous ne pouvez pas regsvr32 une tlb ... n'est pas ce que regasm fait? – user1161137

Répondre

1

Il suffit d'utiliser une interface ... celle que vous définissez ou d'utiliser le [ClassInterface (ClassInterfaceType.AutoDual)] il y a des commentaires en ligne que vous pouvez trouver qui indiquent de ne pas utiliser autodual, mais si vous contrôlez l'utilisation complète de votre bibliothèque, il semble que c'est un bon moyen d'y aller.

J'ai essayé toutes sortes de façons de simuler/comprendre pourquoi mon projet n'avait pas besoin d'une interface pour être visible par un projet vb, sans succès. J'avais initialement pensé peut-être possible que c'était parce que ce projet avait implémenté une interface IDisposable (l'interface UNIQUEMENT utilisée dans les projets C# qui est visible) mais cela ne s'est pas avéré être la raison. De toute façon, je ne veux pas perdre le temps de quelqu'un d'autre à ce sujet. merci pour les réponses.

ce lien fournit une ample information sur le sujet: http://anturcynhyrfus.blogspot.com/2011/03/creating-com-visible-c-component.html

Questions connexes