Cenni preliminari sul marshalling in C++
Nella modalità mista, talvolta è necessario effettuare il marshalling dei dati tra heap nativo e tipi gestiti.Visual Studio 2008 ha introdotto la libreria del marshalling per facilitare il marshalling e convertire i dati in modo semplice.
È possibile utilizzare la libreria del marshalling con o senza Classe marshal_context.Alcuna conversione richiede un contesto.Altre conversioni possono essere distribuite utilizzando la funzione di marshal_as .Nella tabella seguente sono elencate le conversioni correnti supportate, se richiedono un contesto e di marshalling file è necessario includere:
Per tipo |
Per digitare |
Metodo del marshalling |
File di inclusione |
---|---|---|---|
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^ |
wchar_t* const |
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 esegue il marshalling da codice gestito ai tipi di dati nativi e il tipo nativo che si sta convertendo non fa pulire un distruttore per automatico.Il contesto di marshalling elimina il tipo di dati nativo allocato nel rispettivo distruttore.Di conseguenza, le conversioni che richiedono un contesto sono valide solo fino a eliminare il contesto.Per salvare tutti i valori effettuato il marshalling, è necessario copiare i valori alle proprie variabili.
[!NOTA]
Se è incorporato NULLoggetti nella stringa, il risultato di effettuare il marshalling della stringa non è garantito.NULLincorporato oggetti possono causare una stringa venga troncato o potrebbero essere mantenuti.
La libreria del marshalling è estensibile così da poter 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