Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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