marshal_context, classe
Cette classe convertit les données entre les environnements natifs et managés.
Syntaxe
class marshal_context
Notes
Utilisez la marshal_context
classe pour les conversions de données qui nécessitent un contexte. Pour plus d’informations sur les conversions qui nécessitent un contexte et le fichier de marshaling à inclure, consultez Vue d’ensemble du marshaling en C++. Le résultat du marshaling lorsque vous utilisez un contexte n’est valide que jusqu’à ce que l’objet marshal_context
soit détruit. Pour conserver votre résultat, vous devez copier les données.
La même marshal_context
chose peut être utilisée pour de nombreuses conversions de données. La réutilisation du contexte de cette façon n’affecte pas les résultats des appels de marshaling précédents.
Membres
Constructeurs publics
Nom | Description |
---|---|
marshal_context::marshal_context | Construit un marshal_context objet à utiliser pour la conversion de données entre les types de données managés et natifs. |
marshal_context::~marshal_context | Détruit un objet marshal_context . |
Méthodes publiques
Nom | Description |
---|---|
marshal_context::marshal_as | Effectue le marshaling sur un objet de données spécifique pour le convertir entre un type de données managé et natif. |
Spécifications
Fichier d’en-tête :<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h> ou <msclr\marshal_atl.h>
Namespace : msclr ::interop
marshal_context::marshal_context
Construit un marshal_context
objet à utiliser pour la conversion de données entre les types de données managés et natifs.
marshal_context();
Notes
Certaines conversions de données nécessitent un contexte de marshaling. Pour plus d’informations sur les traductions nécessitant un contexte et le fichier de marshaling que vous devez inclure dans votre application, consultez Vue d’ensemble du marshaling en C++.
Exemple
Consultez l’exemple de marshal_context ::marshal_as.
marshal_context::~marshal_context
Détruit un objet marshal_context
.
~marshal_context();
Notes
Certaines conversions de données nécessitent un contexte de marshaling. Consultez Vue d’ensemble du marshaling en C++ pour plus d’informations sur les traductions nécessitant un contexte et le fichier de marshaling à inclure dans votre application.
La suppression d’un marshal_context
objet invalidera les données converties par ce contexte. Si vous souhaitez conserver vos données après la destruction d’un marshal_context
objet, vous devez copier manuellement les données dans une variable qui persistera.
marshal_context::marshal_as
Effectue le marshaling sur un objet de données spécifique pour le convertir entre un type de données managé et natif.
To_Type marshal_as<To_Type>(
From_Type input
);
Paramètres
input
[in] Valeur à marshaler sur une To_Type
variable.
Valeur retournée
Variable de type To_Type
qui est la valeur convertie de input
.
Notes
Cette fonction effectue le marshaling sur un objet de données spécifique. Utilisez cette fonction uniquement avec les conversions indiquées par la table dans Vue d’ensemble du marshaling en C++.
Si vous essayez de marshaler une paire de types de données qui ne sont pas pris en charge, marshal_as
génère une erreur C4996 au moment de la compilation. Lisez le message fourni avec cette erreur pour plus d’informations. L’erreur C4996
peut être générée pour plus que de simplement déprécier les fonctions. Deux conditions qui génèrent cette erreur tentent de marshaler une paire de types de données qui ne sont pas pris en charge et qui essaient d’utiliser marshal_as
pour une conversion nécessitant un contexte.
La bibliothèque de marshaling se compose de plusieurs fichiers d’en-tête. Toute conversion ne nécessite qu’un seul fichier, mais vous pouvez inclure des fichiers supplémentaires si vous avez besoin d’autres conversions. La table dans Marshaling Overview in C++
laquelle indique le fichier de marshaling doit être inclus pour chaque conversion.
Exemple
Cet exemple crée un contexte pour le marshaling d’un System::String
type de variable vers un const char *
type de variable. Les données converties ne seront pas valides après la ligne qui supprime le contexte.
// 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;
}