Partager via


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;
}