Share via


Definieren des Marshallingtyps

Bevor Sie einen Marshaller erstellen, müssen Sie die verwalteten und nicht verwalteten Schnittstellen definieren, die gemarshallt werden sollen. Diese Schnittstellen führen in der Regel dieselben Funktionen durch, werden aber den verwalteten und für nicht verwaltete Schnittstellen auf verschiedene Weise verfügbar gemacht.

Ein verwalteter Compiler erstellt eine verwaltete Schnittstelle aus Metadaten. Die resultierende Schnittstelle ähnelt jeder beliebigen anderen verwalteten Schnittstelle. Im folgenden Codebeispiel wird eine typische Schnittstelle dargestellt:

#using <mscorlib.dll>
interface INew {
    void NewMethod();
}

Definieren Sie den nicht verwalteten Typ in IDL (Interface Definition Language), und kompilieren Sie ihn mit dem MIDL-Compiler. Anschließend definieren Sie die Schnittstelle in einer Bibliotheksanweisung und ordnen ihr mit dem UUID-Attribut (Universal Unique Identifier, universeller eindeutiger Bezeichner) einen Schnittstellenbezeichner zu.

In Old.idl

[uuid(9B2BAADA-0705-11D3-A0CD-00C04FA35826)]
library OldLib {
     [uuid(9B2BAADD-0705-11D3-A0CD-00C04FA35826)]
     interface IOld : IUnknown
         HRESULT OldMethod();
}

Der MIDL-Compiler erstellt mehrere Ausgabedateien. Wenn die Schnittstelle in Old.idl definiert ist, definiert die Ausgabedatei Old_i.c eine const-Variable mit der IID (Interface Identifier, Schnittstellenbezeichner) der Schnittstelle:

In Old_i.c

const IID IID_IOld = {0x9B2BAADD,0x0705,0x11D3,{0xA0,0xCD,0x00,0xC0,0x4F,0xA3,0x58,0x26}};

Die Datei Old.h wird auch durch MIDL erstellt. Sie enthält eine C++-Definition der Schnittstelle, die im C++-Quellcode enthalten sein kann.

Siehe auch

Konzepte

Benutzerdefiniertes Marshalling

Implementieren der ICustomMarshaler-Schnittstelle

Verwenden eines Ersatzmarshallers