Classe marshal_context

Questa classe converte i dati tra ambienti nativi e gestiti.

Sintassi

class marshal_context

Osservazioni:

Utilizzare la classe marshal_context per le conversioni di dati che richiedono un contesto. Per altre informazioni sulle conversioni che richiedono un contesto e sul file di marshalling da includere, vedere Panoramica del marshalling in C++. Il risultato del marshalling quando si utilizza un contesto è valido solo fino a quando l'oggetto marshal_context non viene eliminato in modo permanente. Per conservare il risultato, è necessario copiare i dati.

Lo stesso marshal_context può essere usato per numerose conversioni di dati. Il riutilizzo del contesto in questo modo non influirà sui risultati delle chiamate di marshalling precedenti.

Membri

Costruttori pubblici

Nome Descrizione
marshal_context::marshal_context Costruisce un marshal_context oggetto da utilizzare per la conversione dei dati tra tipi di dati gestiti e nativi.
marshal_context::~marshal_context Elimina un oggetto marshal_context .

Metodi pubblici

Nome Descrizione
marshal_context::marshal_as Effettua il marshalling su un oggetto dati specifico per convertirlo tra un tipo di dati gestito e un tipo nativo.

Requisiti

File di intestazione:<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h> o <msclr\marshal_atl.h>

Spazio dei nomi: msclr::interop

marshal_context::marshal_context

Costruisce un marshal_context oggetto da utilizzare per la conversione dei dati tra tipi di dati gestiti e nativi.

marshal_context();

Osservazioni:

Alcune conversioni di dati richiedono un contesto di marshalling. Per altre informazioni sulle traduzioni che richiedono un contesto e sul file di marshalling da includere nell'applicazione, vedere Panoramica del marshalling in C++.

Esempio

Vedere l'esempio per marshal_context::marshal_as.

marshal_context::~marshal_context

Elimina un oggetto marshal_context .

~marshal_context();

Osservazioni:

Alcune conversioni di dati richiedono un contesto di marshalling. Vedere Panoramica del marshalling in C++ per altre informazioni sulle traduzioni che richiedono un contesto e sul file di marshalling da includere nell'applicazione.

L'eliminazione di un oggetto marshal_context invaliderà i dati convertiti da quel contesto. Se si desidera mantenere i dati dopo l'eliminazione definitiva di un oggetto marshal_context, è necessario copiarli manualmente in una variabile che rimarrà valida.

marshal_context::marshal_as

Effettua il marshalling su un oggetto dati specifico per convertirlo tra un tipo di dati gestito e un tipo nativo.

To_Type marshal_as<To_Type>(
   From_Type input
);

Parametri

input
[in] Valore di cui si vuole effettuare il marshalling a una To_Type variabile.

Valore restituito

Variabile di tipo To_Type che rappresenta il valore convertito di input.

Osservazioni:

Questa funzione effettua il marshalling di un oggetto dati specifico. Usare questa funzione solo con le conversioni indicate dalla tabella in Panoramica del marshalling in C++.

Se si tenta di effettuare il marshalling di una coppia di tipi di dati non supportati, marshal_as verrà generato un errore C4996 in fase di compilazione. Per altre informazioni, leggere il messaggio fornito con questo errore. L'errore C4996 può essere generato per più di una semplice funzione deprecata. Due condizioni che generano questo errore tentano di effettuare il marshalling di una coppia di tipi di dati non supportati e che tentano di usare marshal_as per una conversione che richiede un contesto.

La libreria di marshalling è costituita da diversi file di intestazione. Qualsiasi conversione richiede un solo file, ma è possibile includere file aggiuntivi se è necessario per altre conversioni. Nella tabella in Marshaling Overview in C++ è indicato quale file di marshalling deve essere incluso per ogni conversione.

Esempio

In questo esempio viene creato un contesto per il marshalling da un tipo di variabile System::String a un tipo di variabile const char *. I dati convertiti non saranno validi dopo la riga che elimina il contesto.

// marshal_context_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>

using namespace System;
using namespace msclr::interop;

int main() {
   marshal_context^ context = gcnew marshal_context();
   String^ message = gcnew String("Test String to Marshal");
   const char* result;
   result = context->marshal_as<const char*>( message );
   delete context;
   return 0;
}