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