Información general del cálculo de referencias en C++

En modo mixto, deben calcularse a veces las referencias de los datos entre los tipos nativos y los administrados. Visual Studio 2008 introdujo la biblioteca de cálculo de referencias para ayudarle a calcular y convertir los datos de una manera sencilla.

Puede utilizar la biblioteca de cálculo de referencias con o sin una marshal_context (Clase). 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 cálculo de referencias que se debe incluir:

De tipo

A tipo

Método de cálculo de referencias

Incluir archivo

System::String^

const char *

marshal_context

marshal.h

const char *

System::String^

marshal_as

marshal.h

char*

System::String^

marshal_as

marshal.h

System::String^

const wchar_t*

marshal_context

marshal.h

const wchar_t *

System::String^

marshal_as

marshal.h

wchar_t*

System::String^

marshal_as

marshal.h

System::IntPtr

HANDLE

marshal_as

marshal_windows.h

HANDLE

System::IntPtr

marshal_as

marshal_windows.h

System::String^

BSTR

marshal_context

marshal_windows.h

BSTR

System::String^

marshal_as

marshal.h

System::String^

bstr_t

marshal_as

marshal_windows.h

bstr_t

System::String^

marshal_as

marshal_windows.h

System::String^

std::string

marshal_as

marshal_cppstd.h

std::string

System::String^

marshal_as

marshal_cppstd.h

System::String^

std::wstring

marshal_as

marshal_cppstd.h

std::wstring

System::String^

marshal_as

marshal_cppstd.h

System::String^

CStringT<char>

marshal_as

marshal_atl.h

CStringT<char>

System::String^

marshal_as

marshal_atl.h

System::String^

CStringT<wchar_t>

marshal_as

marshal_atl.h

CStringT<wchar_t>

System::String^

marshal_as

marshal_atl.h

System::String^

CComBSTR

marshal_as

marshal_atl.h

CComBSTR

System::String^

marshal_as

marshal_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 cálculo de referencias 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 NULLen la cadena, el resultado de calcular la cadena no se puede garantizar.Los valores NULL incrustados pueden hacer que la cadena se trunque o no pueda conservarse.

Los encabezados de la biblioteca de cálculo de referencias se encuentran en el directorio de inclusión en el subdirectorio msclr. 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 cálculo de referencias. Para obtener más información sobre cómo extender la biblioteca de cálculo de referencias, vea Cómo: Extender la biblioteca de cálculo de referencias.

En versiones anteriores, se podían calcular las referencias de los datos mediante Invocación de plataforma. Para obtener más información sobre PInvoke, vea Llamar a funciones nativas desde código administrado.

Vea también

Tareas

Cómo: Extender la biblioteca de cálculo de referencias

Otros recursos

Biblioteca de compatibilidad de C++