Información general de la serialización en C++/CLI
En modo mixto, deben serializar los datos entre los tipos nativos y los administrados. La biblioteca de serialización le ayuda a serializar y convertir los datos de una manera sencilla. La biblioteca de serialización consta de un conjunto de funciones y una clase marshal_context
que realiza serializaciones para tipos comunes. La biblioteca se define en estos encabezados en el directorio include/msclr de la edición de Visual Studio:
Encabezado | Descripción |
---|---|
serializar.h | Funciones de serialización sin contexto y clase de marshal_context |
serializar_atl.h | Funciones para serializar tipos ATL |
serializar_cppstd.h | Funciones para serializar tipos estándar de C++ |
marshal_windows.h | Funciones para serializar tipos de Windows |
La ruta de acceso predeterminada para la carpeta msclr es similar a esta en función de la edición que tenga y el número de compilación:
C:\\Program Files (x86)\\Microsoft Visual Studio\\Preview\\Enterprise\\VC\\Tools\\MSVC\\14.15.26528\\include\\msclr
Puede utilizar la biblioteca de serialización de referencias con o sin una clase marshal_context. Algunas conversiones requieren un contexto. Otras conversiones se pueden implementar mediante la función marshal_as. En la tabla siguiente se enumeran las conversiones actuales compatibles y se indica si requieren un contexto y el archivo de serializar que se debe incluir:
De tipo | A tipo | Método serializar | Incluir archivo |
---|---|---|---|
System::String^ | const char* | serializar_context | serializar.h |
const char* | System::String^ | serializar_as | serializar.h |
char * | System::String^ | serializar_as | serializar.h |
System::String^ | const wchar_t* | serializar_context | serializar.h |
const wchar_t* | System::String^ | serializar_as | serializar.h |
wchar_t * | System::String^ | serializar_as | serializar.h |
System::IntPtr | HANDLE | serializar_as | marshal_windows.h |
HANDLE | System::IntPtr | serializar_as | marshal_windows.h |
System::String^ | BSTR | serializar_context | marshal_windows.h |
BSTR | System::String^ | serializar_as | serializar.h |
System::String^ | bstr_t | serializar_as | marshal_windows.h |
bstr_t | System::String^ | serializar_as | marshal_windows.h |
System::String^ | std::string | serializar_as | serializar_cppstd.h |
std::string | System::String^ | serializar_as | serializar_cppstd.h |
System::String^ | std::wstring | serializar_as | serializar_cppstd.h |
std::wstring | System::String^ | serializar_as | serializar_cppstd.h |
System::String^ | <char> | serializar_as | serializar_atl.h |
<char> | System::String^ | serializar_as | serializar_atl.h |
System::String^ | <wchar_t> | serializar_as | serializar_atl.h |
<wchar_t> | System::String^ | serializar_as | serializar_atl.h |
System::String^ | CComBSTR | serializar_as | serializar_atl.h |
CComBSTR | System::String^ | serializar_as | serializar_atl.h |
El cálculo de referencias requiere un contexto solo cuando se calcula de tipos de datos administrados a tipos de datos nativos y el tipo nativo que se va a convertir no tiene un destructor para la limpieza automática. El contexto de serialización destruye el tipo de datos nativo asignado en su destructor. Por consiguiente, las conversiones que requieren un contexto serán válidas solo hasta que se elimine el contexto. Para guardar cualquier valor de cálculo de referencias, debe copiar los valores a sus propias variables.
Nota:
Si ha incrustado valores NULL
en la cadena, el resultado de serializar la cadena no se puede garantizar. Los valores NULL
incrustados pueden hacer que la cadena se trunque o no pueda conservarse.
Este ejemplo muestra cómo incluir el directorio msclr en una declaración de encabezado de inclusión:
#include "msclr\marshal_cppstd.h"
La biblioteca de cálculo de referencias es extensible para que pueda agregar sus propios tipos de serialización. Para obtener más información sobre cómo extender la biblioteca de serialización, vea Cómo: Extender la biblioteca de serialización.
Consulte también
Biblioteca de compatibilidad de C++
Cómo: Extender la biblioteca de serialización