Domanda

Ho creato una libreria di classi C # e la sto usando tramite un'applicazione VB 6.0. Ma quando provo a chiamare qualsiasi metodo (che restituisce una stringa) mi dà un errore di automazione. In caso contrario, la classe C # funziona correttamente.

Qualche idea sul perché?

È stato utile?

Soluzione

Come dice fbinder, dovresti firmare con forza il tuo assembly e usare alcuni attributi. Gli attributi che utilizziamo (con successo) sono:

[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();
}

Altri suggerimenti

Dovresti firmare con forza la tua libreria di classi, registrarla con regasm e metterla prima della definizione della tua classe:

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

Inoltre, è necessario definire un'interfaccia per esporre i metodi desiderati. L'interfaccia dovrebbe avere gli attributi:

 [Guid("Interface GUID")]
 [ComVisible(true)]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top