1

VBAから使用するC#を使用してクラスライブラリを作成しています。しかし、私を落胆させることが1つあります。メソッド名の一部の文字を削除または変更して、vbaプロジェクトをコンパイルしようとしても、エラーは発生しません。しかし、遅延バインディングを使用しているために発生することがわかった場合は、コンパイルエラーメッセージを表示したいと思います。

説明しようと思います。

  1. それは正しい署名です:

    Sub Test()
      Dim cls as New SomeClass
      cls.SomeMethod
    End Sub
    
  2. スペルミスのある署名です。

    Sub Test()
      Dim cls as New SomeClass
      cls.**SomeMetod**
    End Sub
    
  3. [コンパイルVBAプロジェクト]を押し​​ます-すべて問題ありませんが、そうではありません。

以下に示すように、ベースインターフェイスを変更しました。

[Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IComInterface
{}

および基本クラス:

[ClassInterface(ClassInterfaceType.None)]
public class BaseClass

しかし、何も起こりません!!! 実行時にエラーが発生するだけです。

4

1 に答える 1

1

解決策は次のとおりです。

    [Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IComInterface
    {}

および基本クラス:

    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class BaseClass

コードのバージョン管理はサポートされないことに注意してください。また、ToString()、GetHashCode()などの.NETメソッドがVBAで表示されるようになりました。したがって、これらのメソッドには属性[ComVisible(false)]を使用する必要があります。これは、ToString、GetHashCode、Equalsで機能します。その場合、GetTypeを非表示にすることはできません。したがって、.NETメソッドを非表示にする必要があるのか​​、それとも早期のバインディングとコンパイルの警告を出す必要があるのか​​を判断する必要があります。

于 2012-10-12T10:07:01.637 に答える