Megosztás a következőn keresztül:


Példa COM-osztályra

Az alábbi kód egy olyan osztály példája, amelyet COM-objektumként tehet közzé. Miután elhelyezte ezt a kódot a projekthez hozzáadott .cs fájlban, állítsa a Register for COM Interop tulajdonságot True (Igaz) értékre. További információ : Útmutató: Összetevő regisztrálása a COM Interop-hoz.

A C#-objektumok COM-nak való felfedéséhez osztályfelületet, szükség esetén "esemény-interfészt" és magát az osztályt kell deklarálnia. Az osztálytagoknak az alábbi szabályokat kell követniük, hogy láthatóak legyenek a COM számára:

  • Az osztálynak nyilvánosnak kell lennie.
  • A tulajdonságoknak, metódusok és eseményeknek nyilvánosnak kell lenniük.
  • A tulajdonságokat és metódusokat az osztály felületén kell deklarálni.
  • Az eseményeket az esemény felületén kell deklarálni.

Az osztály más nyilvános tagjai, amelyeket nem deklarál ezekben a felületeken, nem láthatók a COM számára, de más .NET-objektumok számára is láthatók. Ha tulajdonságokat és metódusokat szeretne elérhetővé tenni a COM-nak, deklarálnia kell őket az osztály felületén, meg kell jelölnie őket egy DispId attribútummal, és végre kell hajtania őket az osztályban. Az a sorrend, amelyben deklarálja a tagokat a felületen, a COM virtuális táblához használt sorrend. Az osztály eseményeinek felfedéséhez deklarálnia kell őket az esemény felületén, és meg kell jelölnie őket egy DispId attribútummal. Az osztálynak nem szabad implementálnia ezt a felületet.

Az osztály megvalósítja az osztály felületét; több felületet is implementálhat, de az első implementáció az alapértelmezett osztályfelület. Itt implementálhatja a COM számára elérhető módszereket és tulajdonságokat. Nyilvánosnak kell lenniük, és meg kell egyezniük az osztály felületének deklarációival. Deklarálja az osztály által felvetett eseményeket is. Nyilvánosnak kell lenniük, és meg kell egyezniük az esemény felületén található deklarációkkal.

Példa

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

Lásd még