Bagikan melalui


Contoh Kelas COM

Kode berikut adalah contoh kelas yang akan Anda ekspos sebagai objek COM. Setelah Anda menempatkan kode ini dalam file .cs yang ditambahkan ke proyek Anda, atur properti Daftar untuk Interop COM ke True. Untuk informasi selengkapnya, lihat Cara: Mendaftarkan Komponen untuk Interop COM.

Mengekspos objek C# ke COM memerlukan deklarasi antarmuka kelas, "antarmuka peristiwa" jika perlu, dan kelas itu sendiri. Anggota kelas harus mengikuti aturan ini agar terlihat oleh COM:

  • Kelas harus publik.
  • Properti, metode, dan peristiwa harus publik.
  • Properti dan metode harus dideklarasikan pada antarmuka kelas.
  • Peristiwa harus dideklarasikan dalam antarmuka peristiwa.

Anggota publik lain di kelas yang tidak Anda deklarasikan di antarmuka ini tidak terlihat oleh COM, tetapi terlihat oleh objek .NET lainnya. Untuk mengekspos properti dan metode ke COM, Anda harus mendeklarasikannya pada antarmuka kelas dan menandainya dengan atribut DispId, dan mengimplementasikannya di kelas. Urutan di mana Anda mendeklarasikan anggota dalam antarmuka adalah urutan yang digunakan untuk COM vtable. Untuk mengekspos peristiwa dari kelas, Anda harus mendeklarasikannya pada antarmuka peristiwa dan menandainya dengan atribut DispId. Kelas tidak boleh mengimplementasikan antarmuka ini.

Kelas mengimplementasikan antarmuka kelas; ini dapat mengimplementasikan lebih dari satu antarmuka, tetapi implementasi pertama adalah antarmuka kelas default. Terapkan metode dan properti yang terekspos ke COM di sini. Mereka harus publik dan harus cocok dengan deklarasi di antarmuka kelas. Juga, nyatakan peristiwa yang diangkat oleh kelas di sini. Mereka harus publik dan harus cocok dengan deklarasi di antarmuka peristiwa.

Contoh

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
    {
    }
}

Lihat juga