COM クラスの例 (C# プログラミング ガイド)
ここでは、COM オブジェクトとして公開されるクラスの例を紹介します。このコードを .cs ファイルに保存して、プロジェクトに追加後、[COM の相互運用機能に登録] プロパティを [True] に設定します。詳細については、「How to: Register a Component for COM Interop」を参照してください。
Visual C# オブジェクトを COM に公開するには、クラス インターフェイス、イベント インターフェイス (必要な場合)、およびクラス自体を宣言する必要があります。クラス メンバーを COM で参照するには、次の規則に従う必要があります。
クラスがパブリックであること。
プロパティ、メソッド、およびイベントがパブリックであること。
プロパティとメソッドがクラス インターフェイスで宣言されていること。
イベントがイベント インターフェイスで宣言されていること。
これらのインターフェイスで宣言されていない、クラス内のほかのパブリック メンバーは、COM から参照されませんが、ほかの .NET Framework オブジェクトからは参照されます。
プロパティとメソッドを 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
{
}
}