Panoramica del marshaling in C++
Nella modalità mista, talvolta è necessario effettuare il marshalling dei dati tra tipi nativi e tipi gestiti. Visual Studio 2008 ha introdotto la libreria di marshalling per aiutare ad effettuare il marshalling e convertire i dati in modo semplice.
È possibile utilizzare la libreria del marshalling con o senza Classe marshal_context. Alcune conversioni richiedono un contesto. Altre conversioni possono essere implementate mediante la funzione marshal_as. Nella tabella seguente sono elencate le correnti conversioni supportate, se richiedono un contesto e che file marshal è necessario includere:
Dal tipo |
Al tipo |
Metodo del marshalling |
Include file |
---|---|---|---|
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 |
Il marshalling richiede un contesto solo quando si effettua il marshalling da codice gestito a tipi di dati nativi e il tipo nativo che si sta convertendo non ha un distruttore per eseguire la pulizia automatica. Il contesto di marshalling elimina il tipo di dati nativo allocato nel distruttore. Di conseguenza, le conversioni che richiedono un contesto sono valide solo finché non verrà eliminato il contesto. Per salvare tutti i valori sottoposti a marshalling, è necessario copiare i valori nelle variabili.
Nota
Se si sono incorporati valori NULL nella stringa, il risultato del marshalling della stringa non è garantito.Valori NULL incorporati possono causare il troncamento della stringa o che vengano mantenuti.
Le intestazioni della libreria del marshalling si trovano nella directory di inclusione nella sottodirectory del msclr. In questo esempio viene illustrato come includere la directory msclr in una dichiarazione di intestazione di inclusione:
#include "msclr\marshal_cppstd.h"
La libreria del marshalling è estensibile così si possono aggiungere i propri tipi di marshalling. Per ulteriori informazioni sull'estensione della libreria del marshalling, vedere Procedura: estendere la libreria del marshalling.
Nelle versioni precedenti, è possibile eseguire il marshalling dei dati utilizzando Platform invoke. Per ulteriori informazioni su PInvoke, vedere Chiamata a funzioni native da codice gestito.
Vedere anche
Attività
Procedura: estendere la libreria del marshalling