2009-06-18 9 views
1

Ich habe eine C# -Klassenbibliothek erstellt und verwende sie über eine VB 6.0-Anwendung. Aber wenn ich versuche, irgendeine Methode aufzurufen (die einen String zurückgibt), gibt es mir einen Automatisierungsfehler. Die C# -Klasse läuft ansonsten gut.Automatisierungsfehler in VB 6.0 von einer C# -Klasse

Irgendeine Idee warum?

Antwort

1

Wie fbinder sagt, sollten Sie Ihre Baugruppe stark signieren und einige Attribute verwenden. Die von uns verwendeten (erfolgreichen) Attribute sind:

[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

Ich habe meinen Code so geändert, dass er genauso aussieht wie Ihres, aber die Fehlermeldung lautet: "Funktion oder Schnittstelle als eingeschränkt markiert oder die Funktion verwendet einen Automatisierungstyp, der in Visual Basic nicht unterstützt wird" – Bhaskar

+0

Sie haben die Guid-Attribute geändert Verwenden Sie Ihre eigenen Anleitungen? Ich schlage vor, dass der nächste Schritt Ihre generierte tlb mit OleView öffnen sollte (meine in "c: \ Programme \ Microsoft Visual Studio \ COMMON \ Tools \ OLEVIEW.EXE") und einen Blick darauf werfen, was RegAsm für Sie registriert hat. Ein anderer Gedanke - RegAsm gibt Warnungen? – Ant

+0

Ich nehme an, die Tatsache, dass Sie diese Antwort akzeptiert haben, bedeutet, dass es für Sie funktioniert hat. :) – Ant

1

Sie sollten stark Ihre Klassenbibliothek anmelden, registrieren Sie es mit regasm und setzen diese vor Ihrer Klassendefinition:

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

Außerdem sollten Sie eine Schnittstelle definieren die gewünschten Methoden aufzudecken. Die Schnittstelle sollte folgende Attribute haben:

+0

Ich habe dies getan. Ich habe auch die tlb-Datei erstellt und als Referenz in meinem VB 6.0-Projekt hinzugefügt. Aber ich bekomme immer noch den gleichen Fehler. Ich gebe eine Zeichenfolge von meiner C# -Klasse an meine VB 6.0 zurück. – Bhaskar