serializar_context (Clase)

Esta clase convierte datos entre los entornos nativo y administrado.

Sintaxis

class marshal_context

Comentarios

Use la clase marshal_context para las conversiones de datos que requieren un contexto. Para obtener más información sobre qué conversiones requieren un contexto y qué archivo de serialización debe incluirse, consulte Información general sobre la serialización en C++. El resultado de la serialización cuando se usa un contexto solo es válido hasta que se destruye el objeto marshal_context. Para conservar el resultado, debe copiar los datos.

La misma clase marshal_context se puede usar para numerosas conversiones de datos. La reutilización del contexto de esta manera no afecta a los resultados de las llamadas de serialización anteriores.

Miembros

Constructores públicos

Nombre Descripción
marshal_context::marshal_context Construye un objeto marshal_context para usarlo en la conversión de datos entre tipos de datos administrados y nativos.
marshal_context::~marshal_context Destruye un objeto marshal_context .

Métodos públicos

Nombre Descripción
marshal_context::marshal_as Serializa un objeto de datos específico para convertirlo entre un tipo de datos administrado y un tipo nativo.

Requisitos

Archivo de encabezado:<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h> o <msclr\marshal_atl.h>

Espacio de nombres: msclr::interop

marshal_context::marshal_context

Construye un objeto marshal_context para usarlo en la conversión de datos entre tipos de datos administrados y nativos.

marshal_context();

Comentarios

Algunas conversiones de datos requieren un contexto de serialización. Para obtener más información sobre qué traducciones requieren un contexto y qué archivo de serialización debe incluirse en la aplicación, consulte Información general sobre la serialización en C++.

Ejemplo

Vea el ejemplo de marshal_context::marshal_as.

marshal_context::~marshal_context

Destruye un objeto marshal_context .

~marshal_context();

Comentarios

Algunas conversiones de datos requieren un contexto de serialización. Consulte Información general sobre la serialización en C++ para obtener más información sobre qué traducciones requieren un contexto y qué archivo de serialización debe incluirse en la aplicación.

La eliminación de un objeto marshal_context invalida los datos convertidos por ese contexto. Si desea conservar los datos después de destruir un objeto marshal_context, debe copiar manualmente los datos en una variable que se conservará.

marshal_context::marshal_as

Serializa un objeto de datos específico para convertirlo entre un tipo de datos administrado y un tipo nativo.

To_Type marshal_as<To_Type>(
   From_Type input
);

Parámetros

input
[in] Valor que desea serializar para una variable To_Type.

Valor devuelto

Variable de tipo To_Type que es el valor convertido de input.

Comentarios

Esta función realiza la serialización en un objeto de datos específico. Use esta función solo con las conversiones que se indican en la tabla que encontrará en Información general sobre la serialización en C++.

Si intenta serializar un par de tipos de datos que no se admiten, marshal_as genera un error C4996 en tiempo de compilación. Lea el mensaje proporcionado con el error para obtener más información. El error C4996 se puede generar para algunas funciones, aparte de las que están en desuso. Dos condiciones que generan este error son intentar serializar un par de tipos de datos que no se admiten e intentar usar marshal_as para una conversión que requiere un contexto.

La biblioteca de cálculo de referencias se compone de varios archivos de encabezado. Cualquier conversión requiere solo un archivo, pero puede incluir archivos adicionales si los necesita para otras conversiones. La tabla que se proporciona en Marshaling Overview in C++ indica qué archivo de serialización se debe incluir para cada conversión.

Ejemplo

En este ejemplo, se crea un contexto para serializar System::String como un tipo de variable const char *. Los datos convertidos no son válidos después de la línea que elimina el contexto.

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