Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższy kod jest przykładem klasy, którą można uwidocznić jako obiekt COM. Po wprowadzeniu tego kodu w pliku .cs dodanym do projektu ustaw właściwość Register for COM Interop na True. Aby uzyskać więcej informacji, zobacz How to: Register a Component for COM Interop (Jak zarejestrować składnik dla międzyoperacjności modelu COM).
Uwidacznianie obiektów języka C# w modelu COM wymaga deklarowania interfejsu klasy, interfejsu "zdarzeń" w razie potrzeby i samej klasy. Składowe klasy muszą być zgodne z tymi regułami, aby były widoczne dla modelu COM:
- Klasa musi być publiczna.
- Właściwości, metody i zdarzenia muszą być publiczne.
- Właściwości i metody należy zadeklarować w interfejsie klasy.
- Zdarzenia muszą być zadeklarowane w interfejsie zdarzenia.
Inne publiczne elementy członkowskie w klasie, których nie deklarujesz w tych interfejsach, nie są widoczne dla modelu COM, ale są one widoczne dla innych obiektów platformy .NET. Aby uwidocznić właściwości i metody modelu COM, należy zadeklarować je w interfejsie klasy i oznaczyć je atrybutem DispId i zaimplementować je w klasie. Kolejność deklarowania elementów członkowskich w interfejsie jest kolejnością używaną dla tabeli wirtualnej COM. Aby uwidocznić zdarzenia z klasy, należy je zadeklarować w interfejsie zdarzeń i oznaczyć je atrybutem DispId . Klasa nie powinna implementować tego interfejsu.
Klasa implementuje interfejs klasy; Może zaimplementować więcej niż jeden interfejs, ale pierwsza implementacja jest domyślnym interfejsem klasy. Tutaj zaimplementuj metody i właściwości uwidocznione w modelu COM. Muszą być publiczne i muszą być zgodne z deklaracjami w interfejsie klasy. Ponadto zadeklaruj zdarzenia zgłoszone przez klasę tutaj. Muszą być publiczne i muszą być zgodne z deklaracjami w interfejsie zdarzeń.
Przykład
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
{
}
}