COM クラスの例

次のコードは、COM オブジェクトとして公開するクラスの例です。 このコードをプロジェクトに追加される .cs ファイルに配置した後、[COM の相互運用機能に登録] プロパティを [True] に設定します。 詳細については、コンポーネントを COM 相互運用機能に登録する」をご覧ください。

C# オブジェクトを COM に公開するには、クラス インターフェイス、"イベント インターフェイス" (必要な場合)、クラス自体を宣言する必要があります。 クラスのメンバーを COM で参照するには、次の規則に従う必要があります。

  • クラスはパブリックであること。
  • プロパティ、メソッド、およびイベントがパブリックであること。
  • プロパティとメソッドがクラス インターフェイスで宣言されていること。
  • イベントがイベント インターフェイスで宣言されていること。

これらのインターフェイスで宣言していないクラス内の他のパブリック メンバーは、COM から参照できませんが、他の .NET オブジェクトからは参照できます。 プロパティとメソッドを COM に公開するには、それらをクラス インターフェイスで宣言し、DispId 属性でマークを付けて、クラスに実装する必要があります。 メンバーをインターフェイスで宣言する順序は、COM vtable で使用される順序になります。 クラスのイベントを公開するには、それらをイベント インターフェイスで宣言し、DispId 属性でマークを付ける必要があります。 クラスでこのインターフェイスを実装しないでください。

クラスでは、クラス インターフェイスが実装されます。複数のインターフェイスを実装できますが、最初に実装されるのは、既定のクラス インターフェイスです。 ここで、COM に対して公開するプロパティとメソッドを実装します。 それらはパブリックである必要があり、クラス インターフェイスの宣言と一致する必要があります。 また、ここでクラスから発生するイベントを宣言します。 それらはパブリックである必要があり、イベント インターフェイスの宣言と一致する必要があります。

using System.Runtime.InteropServices;

namespace project_name
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface
    {
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events
    {
    }

    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
    }
}

関連項目