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
.
Valor retornado
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;
}