Freigeben über


Implementieren der ICustomMarshaler-Schnittstelle

Um einen benutzerdefinierten Marshaller zu verwenden, müssen Sie das MarshalAsAttribute-Attribut auf den Parameter oder das Feld, das gemarshallt werden soll, anwenden. Das Attribut identifiziert den benutzerdefinierten Marshaller, der den entsprechenden Wrapper aktiviert.

Der benutzerdefinierte Marshaller implementiert die ICustomMarshaler Interface-Schnittstelle, um der Laufzeit die angemessenen Wrapper bereitzustellen. Sobald ein Argument gemarshallt werden muss, wird der benutzerdefinierte Marshaller erstellt. Die MarshalNativeToManaged-Methode und die MarshalManagedToNative-Methode werden auf dem benutzerdefinierten Marshaller aufgerufen, um den korrekten Wrapper zur Verarbeitung des Aufrufs zu aktivieren. In der folgenden Tabelle wird jede Methode dargestellt, die durch die Schnittstelle ICustomMarshaler verfügbar gemacht wird.

Schnittstellenmethode Beschreibung

MarshalNativeToManaged

Gibt einen benutzerdefinierten RCW zurück, der die als Argument übergebene nicht verwaltete Schnittstelle marshallen kann. Der Marshaller sollte eine Instanz des benutzerdefinierten RCWs für diesen Typ zurückgeben.

MarshalManagedToNative

Gibt einen benutzerdefinierten CCW zurück, der die verwaltete Schnittstelle marshallen kann, die als Argument übergeben wurde. Der Marshaller sollte eine Instanz des benutzerdefinierten CCWs für diesen Typ zurückgeben.

CleanUpNativeData

Der benutzerdefinierte Marshaller erhält die Gelegenheit, jede notwendige Bereinigung des von der MarshalManagedToNative-Methode zurückgegebenen Wrappers durchzuführen.

CleanUpManagedData

Der benutzerdefinierte Marshaller erhält die Gelegenheit, jede notwendige Bereinigung des von der MarshalNativeToManaged-Methode zurückgegebenen Wrappers durchzuführen.

GetInstance

Ruft eine Instanz des benutzerdefinierten Marshallers ab. Diese statische Methode kann entweder jedes Mal eine neue Instanz des benutzerdefinierten Marshallers erstellen oder aber immer dieselbe Instanz verwenden, wenn der benutzerdefinierte Marshaller statusfrei ist. Die Methode wird durch den Marshalldienst aufgerufen, um jedes Mal einen Marshaller zu erstellen, wenn ein Parameter oder Feld mit dem UnmanagedType.CustomMarshaler markiert ist.

Siehe auch

Konzepte

Definieren des Marshallingtyps
Verwenden eines Ersatzmarshallers

Weitere Ressourcen

Benutzerdefiniertes Marshalling