Implementieren der ICustomMarshaler-Schnittstelle

Aktualisiert: November 2007

Wenn Sie einen benutzerdefinierten Marshaller verwenden möchten, müssen Sie das MarshalAsAttribute-Attribut auf den Parameter oder das Feld anwenden, das gemarshallt werden soll. 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