Información general sobre el cálculo de referencias en C++/CLIOverview of Marshaling in C++/CLI

En modo mixto, deben serializar los datos entre los tipos nativos y los administrados.In mixed mode, you sometimes must marshal your data between native and managed types. La biblioteca de cálculo de referencias le ayuda a calcular las referencias y convertir los datos de una manera sencilla.The marshaling library helps you marshal and convert data in a simple way. La biblioteca de serialización se compone de un conjunto de funciones y una marshal_context clase que realiza el cálculo de referencias para tipos comunes.The marshaling library consists of a set of functions and a marshal_context class that perform marshaling for common types. La biblioteca se define en estos encabezados en el directorio include/msclr de la edición de Visual Studio:The library is defined in these headers in the include/msclr directory for your Visual Studio edition:

EncabezadoHeader DescripciónDescription
serializar.hmarshal.h marshal_context clases y funciones de serialización sin contextomarshal_context class and context-free marshaling functions
serializar_atl.hmarshal_atl.h Funciones para calcular las referencias de tipos ATLFunctions for marshaling ATL types
serializar_cppstd.hmarshal_cppstd.h Funciones para calcular las referencias de los tipos de C++ estándarFunctions for marshaling standard C++ types
marshal_windows.hmarshal_windows.h Funciones para calcular las referencias de tipos de WindowsFunctions for marshaling Windows types

La ruta de acceso predeterminada de la carpeta msclr es similar a la de la edición que tiene y el número de compilación:The default path for msclr folder is something like this depending on which edition you have and the build number:

C:\\Program Files (x86)\\Microsoft Visual Studio\\Preview\\Enterprise\\VC\\Tools\\MSVC\\14.15.26528\\include\\msclr

Puede usar la biblioteca de cálculo de referencias con o sin una clase marshal_context.You can use the marshaling library with or without a marshal_context Class. Algunas conversiones requieren un contexto.Some conversions require a context. Se pueden implementar otras conversiones mediante la función marshal_as .Other conversions can be implemented using the marshal_as function. 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:The following table lists the current conversions supported, whether they require a context, and what marshal file you have to include:

De tipoFrom type A tipoTo type Método serializarMarshal method Incluir archivoInclude file
System::String^System::String^ const char *const char * serializar_contextmarshal_context serializar.hmarshal.h
const char *const char * System::String^System::String^ serializar_asmarshal_as serializar.hmarshal.h
Juegos *char * System::String^System::String^ serializar_asmarshal_as serializar.hmarshal.h
System::String^System::String^ wchar_t const*const wchar_t* serializar_contextmarshal_context serializar.hmarshal.h
wchar_t const *const wchar_t * System::String^System::String^ serializar_asmarshal_as serializar.hmarshal.h
wchar_t *wchar_t * System::String^System::String^ serializar_asmarshal_as serializar.hmarshal.h
System::IntPtrSystem::IntPtr HANDLEHANDLE serializar_asmarshal_as marshal_windows.hmarshal_windows.h
HANDLEHANDLE System::IntPtrSystem::IntPtr serializar_asmarshal_as marshal_windows.hmarshal_windows.h
System::String^System::String^ BSTRBSTR serializar_contextmarshal_context marshal_windows.hmarshal_windows.h
BSTRBSTR System::String^System::String^ serializar_asmarshal_as serializar.hmarshal.h
System::String^System::String^ bstr_tbstr_t serializar_asmarshal_as marshal_windows.hmarshal_windows.h
bstr_tbstr_t System::String^System::String^ serializar_asmarshal_as marshal_windows.hmarshal_windows.h
System::String^System::String^ std::stringstd::string serializar_asmarshal_as serializar_cppstd.hmarshal_cppstd.h
std::stringstd::string System::String^System::String^ serializar_asmarshal_as serializar_cppstd.hmarshal_cppstd.h
System::String^System::String^ std::wstringstd::wstring serializar_asmarshal_as serializar_cppstd.hmarshal_cppstd.h
std::wstringstd::wstring System::String^System::String^ serializar_asmarshal_as serializar_cppstd.hmarshal_cppstd.h
System::String^System::String^ CStringT<char>CStringT<char> serializar_asmarshal_as serializar_atl.hmarshal_atl.h
CStringT<char>CStringT<char> System::String^System::String^ serializar_asmarshal_as serializar_atl.hmarshal_atl.h
System::String^System::String^ Wchar_t deCStringT<wchar_t> serializar_asmarshal_as serializar_atl.hmarshal_atl.h
Wchar_t deCStringT<wchar_t> System::String^System::String^ serializar_asmarshal_as serializar_atl.hmarshal_atl.h
System::String^System::String^ CComBSTRCComBSTR serializar_asmarshal_as serializar_atl.hmarshal_atl.h
CComBSTRCComBSTR System::String^System::String^ serializar_asmarshal_as serializar_atl.hmarshal_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.Marshaling requires a context only when you marshal from managed to native data types and the native type you are converting to does not have a destructor for automatic clean up. El contexto de serialización destruye el tipo de datos nativo asignado en su destructor.The marshaling context destroys the allocated native data type in its destructor. Por consiguiente, las conversiones que requieren un contexto serán válidas solo hasta que se elimine el contexto.Therefore, conversions that require a context will be valid only until the context is deleted. Para guardar cualquier valor de cálculo de referencias, debe copiar los valores a sus propias variables.To save any marshaled values, you must copy the values to your own variables.

Nota

Si ha incrustado valores NULLen la cadena, el resultado de serializar la cadena no se puede garantizar.If you have embedded NULLs in your string, the result of marshaling the string is not guaranteed. Los valores NULL incrustados pueden hacer que la cadena se trunque o no pueda conservarse.The embedded NULLs can cause the string to be truncated or they might be preserved.

Este ejemplo muestra cómo incluir el directorio msclr en una declaración de encabezado de inclusión:This example shows how to include the msclr directory in an include header declaration:

#include "msclr\marshal_cppstd.h"

La biblioteca de cálculo de referencias es extensible para que pueda agregar sus propios tipos de serialización.The marshaling library is extensible so that you can add your own marshaling types. Para obtener más información sobre cómo extender la biblioteca de cálculo de referencias, vea Cómo: extender la biblioteca de serialización.For more information about extending the marshaling library, see How to: Extend the Marshaling Library.

Consulta tambiénSee also

Biblioteca de compatibilidad de C++C++ Support Library
Cómo: extender la biblioteca de serializaciónHow to: Extend the Marshaling Library