2009-06-18 7 views
1

J'ai créé une bibliothèque de classe C# et je l'utilise via une application VB 6.0. Mais quand j'essaye d'appeler n'importe quelle méthode (qui retourne une chaîne) cela me donne une erreur d'automation. La classe C# fonctionne correctement dans le cas contraire.Erreur d'automatisation dans VB 6.0 à partir d'une classe C#

Une idée pourquoi?

Répondre

1

Comme le dit le fbinder, vous devez fortement signer votre assembly et utiliser certains attributs. Les attributs que nous utilisons (avec succès) sont:

[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
[Guid("00000000-0000-0000-0000-000000000000")] 
[ComDefaultInterface(typeof(IExposedClass))] 
public class ExposedClass : IExposedClass 
{ 
    //need a parameterless constructor - could use the default 
    public ExposedClass() { } 

    public string GetThing() 
    { 
     return "blah"; 
    } 
} 

[ComVisible(true)] 
[Guid("00000000-0000-0000-0000-000000000000")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IExposedClass 
{ 
    string GetThing(); 
} 
+0

J'ai modifié mon code pour qu'il corresponde exactement au vôtre, mais il me donne le message d'erreur "Fonction ou interface marquée comme restreinte, ou la fonction utilise un type Automation non pris en charge dans Visual Basic" – Bhaskar

+0

Vous avez modifié les attributs Guid en utiliser vos propres guids? Je suggère que l'étape suivante devrait être l'ouverture de votre tlb généré avec OleView (mine dans "c: \ Program Files \ Microsoft Visual Studio \ COMMON \ Outils \ OLEVIEW.EXE") et en regardant ce que RegAsm enregistré pour vous. Une autre idée - RegAsm donne-t-il des avertissements? – Ant

+0

Je suppose que le fait que vous ayez accepté cette réponse signifie que cela a fonctionné pour vous. :) – Ant

1

Vous devez signer votre forte bibliothèque de classes, inscrivez-vous avec regasm et de mettre cela avant votre définition de classe:

[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
[Guid("Class GUID")] 

En outre, vous devez définir une interface pour exposer les méthodes souhaitées. L'interface doit avoir les attributs:

[Guid("Interface GUID")] 
[ComVisible(true)] 
+0

Je l'ai fait. J'ai également créé le fichier tlb et l'ai ajouté comme référence dans mon projet VB 6.0. Mais j'ai toujours la même erreur. Je renvoie une chaîne de ma classe C# à mon VB 6.0. – Bhaskar