Freigeben über


marshal_context-Klasse

Diese Klasse konvertiert Daten zwischen nativen und verwalteten Umgebungen.

Syntax

class marshal_context

Hinweise

Verwenden Sie die marshal_context Klasse für Datenkonvertierungen, die einen Kontext erfordern. Weitere Informationen dazu, welche Konvertierungen einen Kontext erfordern und welche Marshallingdatei einbezogen werden muss, finden Sie unter Übersicht über das Marshalling in C++. Das Ergebnis des Marshallings, wenn Sie einen Kontext verwenden, ist nur gültig, bis das marshal_context Objekt zerstört wird. Um Das Ergebnis beizubehalten, müssen Sie die Daten kopieren.

Dasselbe marshal_context kann für zahlreiche Datenkonvertierungen verwendet werden. Die erneute Wiederverwendung des Kontexts wirkt sich nicht auf die Ergebnisse aus vorherigen Marshallingaufrufen aus.

Member

Öffentliche Konstruktoren

Name Beschreibung
marshal_context::marshal_context Erstellt ein marshal_context Objekt, das für die Datenkonvertierung zwischen verwalteten und systemeigenen Datentypen verwendet werden soll.
marshal_context::~marshal_context Zerstört ein marshal_context -Objekt.

Öffentliche Methoden

Name Beschreibung
marshal_context::marshal_as Führt das Marshalling für ein bestimmtes Datenobjekt aus, um es zwischen einem verwalteten und einem systemeigenen Datentyp zu konvertieren.

Anforderungen

Headerdatei:<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h> oder <msclr\marshal_atl.h>

Namespace: msclr::interop

marshal_context::marshal_context

Erstellt ein marshal_context Objekt, das für die Datenkonvertierung zwischen verwalteten und systemeigenen Datentypen verwendet werden soll.

marshal_context();

Hinweise

Einige Datenkonvertierungen erfordern einen Marshallkontext. Weitere Informationen dazu, welche Übersetzungen einen Kontext erfordern und welche Marshallingdatei Sie in Ihre Anwendung einbeziehen müssen, finden Sie unter Übersicht über das Marshalling in C++.

Beispiel

Sehen Sie sich das Beispiel für marshal_context::marshal_as an.

marshal_context::~marshal_context

Zerstört ein marshal_context -Objekt.

~marshal_context();

Hinweise

Einige Datenkonvertierungen erfordern einen Marshallkontext. Weitere Informationen dazu, welche Übersetzungen einen Kontext erfordern und welche Marshallingdatei in Ihre Anwendung aufgenommen werden muss, finden Sie unter Übersicht über das Marshalling in C++ .

Durch das Löschen eines marshal_context Objekts werden die in diesem Kontext konvertierten Daten ungültig. Wenn Sie Ihre Daten nach dem Löschen eines marshal_context Objekts beibehalten möchten, müssen Sie die Daten manuell in eine Variable kopieren, die beibehalten wird.

marshal_context::marshal_as

Führt das Marshalling für ein bestimmtes Datenobjekt aus, um es zwischen einem verwalteten und einem systemeigenen Datentyp zu konvertieren.

To_Type marshal_as<To_Type>(
   From_Type input
);

Parameter

input
[in] Der Wert, den Sie einer To_Type Variablen marshallen möchten.

Rückgabewert

Eine Variable vom Typ To_Type , die den konvertierten Wert von input.

Hinweise

Diese Funktion führt das Marshalling für ein bestimmtes Datenobjekt aus. Verwenden Sie diese Funktion nur mit den Konvertierungen, die in der Tabelle in der Übersicht über das Marshalling in C++ angegeben sind.

Wenn Sie versuchen, ein nicht unterstütztes Datentyppaar zu marshallen, marshal_as wird zur Kompilierungszeit ein Fehler C4996 generiert. Weitere Informationen zu dem Fehler finden Sie in der zugehörigen Meldung. Der Fehler C4996 kann auch bei anderen Problemen als veralteten Funktionen generiert werden. Zwei Bedingungen, die diesen Fehler generieren, versuchen, ein Paar von Datentypen zu marshallen, die nicht unterstützt werden und versuchen, für eine Konvertierung zu verwenden marshal_as , die einen Kontext erfordert.

Die Marshallingbibliothek besteht aus mehreren Headerdateien. Für jede Konvertierung ist nur eine Datei erforderlich, Sie können bei Bedarf jedoch zusätzliche Dateien für andere Konvertierungen einbinden. Die Tabelle gibt Marshaling Overview in C++ an, welche Marshallingdatei für jede Konvertierung eingeschlossen werden soll.

Beispiel

In diesem Beispiel wird ein Kontext für das Marshallen von einem System::String Variablentyp zu einem const char * Variablentyp erstellt. Die konvertierten Daten sind nach der Zeile, die den Kontext löscht, nicht gültig.

// marshal_context_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>

using namespace System;
using namespace msclr::interop;

int main() {
   marshal_context^ context = gcnew marshal_context();
   String^ message = gcnew String("Test String to Marshal");
   const char* result;
   result = context->marshal_as<const char*>( message );
   delete context;
   return 0;
}