1

C#クラスライブラリを作成し、VB6.0アプリケーションで使用しています。しかし、(文字列を返す)メソッドを呼び出そうとすると、自動化エラーが発生します。それ以外の場合、C#クラスは正常に実行されています。

なぜですか?

4

2 に答える 2

1

fbinder が言うように、アセンブリに強い署名を付け、いくつかの属性を使用する必要があります。私たちが(うまく)使用する属性は次のとおりです。

[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();
}
于 2009-06-18T15:58:13.767 に答える
1

クラス ライブラリに強い署名を付け、それを regasm に登録し、これをクラス定義の前に配置する必要があります。

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

また、必要なメソッドを公開するためにインターフェイスを定義する必要があります。インターフェイスには次の属性が必要です。

 [Guid("Interface GUID")]
 [ComVisible(true)]
于 2009-06-18T13:39:07.520 に答える