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;
}