Compartilhar via


Classe marshal_context

Essa classe converte dados entre ambientes nativos e gerenciados.

Sintaxe

class marshal_context

Comentários

Use a classe marshal_context para conversões de dados que exigem um contexto. Para obter mais informações sobre quais conversões exigem um contexto e qual arquivo de marshaling precisa ser incluído, confira Visão geral de marshaling no C++. O resultado do marshaling quando você usa um contexto será válido somente até que o objeto marshal_context seja destruído. Para preservar o resultado, você precisa copiar os dados.

O mesmo marshal_context pode ser usado para várias conversões de dados. A reutilização do contexto dessa maneira não afetará os resultados de chamadas de marshaling anteriores.

Membros

Construtores públicos

Nome Descrição
marshal_context::marshal_context Constrói um objeto marshal_context a ser usado para conversão de dados entre tipos de dados gerenciados e nativos.
marshal_context::~marshal_context Destrói um objeto marshal_context.

Métodos públicos

Nome Descrição
marshal_context::marshal_as Executa o marshaling em um objeto de dados específico para convertê-lo entre um tipo de dados gerenciado e um nativo.

Requisitos

Arquivo de cabeçalho:<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h> ou <msclr\marshal_atl.h>

Namespace: msclr::interop

marshal_context::marshal_context

Constrói um objeto marshal_context a ser usado para conversão de dados entre tipos de dados gerenciados e nativos.

marshal_context();

Comentários

Algumas conversões de dados exigem um contexto de marshal. Para obter mais informações sobre quais conversões exigem um contexto e qual arquivo de marshaling você precisa incluir em seu aplicativo, confira Visão geral de marshaling no C++.

Exemplo

Confira o exemplo de marshal_context::marshal_as.

marshal_context::~marshal_context

Destrói um objeto marshal_context.

~marshal_context();

Comentários

Algumas conversões de dados exigem um contexto de marshal. Para obter mais informações sobre quais conversões exigem um contexto e qual arquivo de marshaling precisa ser incluído em seu aplicativo, confira Visão geral de marshaling no C++.

Excluir um objeto marshal_context invalidará os dados convertidos por esse contexto. Se você quiser preservar seus dados depois que um objeto marshal_context for destruído, precisará copiar manualmente os dados para uma variável que persistirá.

marshal_context::marshal_as

Executa o marshaling em um objeto de dados específico para convertê-lo entre um tipo de dados gerenciado e um nativo.

To_Type marshal_as<To_Type>(
   From_Type input
);

Parâmetros

input
[entrada] O valor cujo marshal você deseja fazer para uma variável To_Type.

Retornar valor

Uma variável de tipo To_Type que é o valor convertido de input.

Comentários

Essa função executa o marshaling em um objeto de dados específico. Use essa função somente com as conversões indicadas pela tabela em Visão geral do marshaling em C++.

Se você tentar empacotar um par de tipos de dados que não têm suporte, marshal_as gerará um erro C4996 no tempo de compilação. Leia a mensagem fornecida com esse erro para obter mais informações. O erro C4996 pode ser gerado para mais do que apenas funções preteridas. Duas condições que geram esse erro estão tentando empacotar um par de tipos de dados que não têm suporte e tentando usar marshal_as para uma conversão que requer um contexto.

A biblioteca de marshaling consiste em vários arquivos de cabeçalho. Qualquer conversão individual requer apenas um arquivo, mas você pode incluir arquivos adicionais se precisar deles para outras conversões. A tabela em Marshaling Overview in C++ indica qual arquivo de marshaling deve ser incluído para cada conversão.

Exemplo

Este exemplo cria um contexto para marshaling de um System::String para um tipo de variável const char *. Os dados convertidos não serão válidos após a linha que exclui o contexto.

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