marshal_context — Klasa

Ta klasa konwertuje dane między środowiskami natywnymi i zarządzanymi.

Składnia

class marshal_context

Uwagi

marshal_context Użyj klasy do konwersji danych, które wymagają kontekstu. Aby uzyskać więcej informacji o tym, które konwersje wymagają kontekstu i który plik marshalingowy musi zostać uwzględniony, zobacz Omówienie marshalingu w języku C++. Wynik marshalingu podczas używania kontekstu jest prawidłowy tylko do momentu marshal_context zniszczenia obiektu. Aby zachować wynik, musisz skopiować dane.

To samo marshal_context może być używane w przypadku wielu konwersji danych. Ponowne użycie kontekstu w ten sposób nie wpłynie na wyniki poprzednich wywołań marshalingowych.

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
marshal_context::marshal_context Tworzy obiekt używany marshal_context do konwersji danych między zarządzanymi i natywnymi typami danych.
marshal_context::~marshal_context marshal_context Niszczy obiekt.

Metody publiczne

Nazwa/nazwisko opis
marshal_context::marshal_as Wykonuje marshaling dla określonego obiektu danych, aby przekonwertować go między zarządzanym i natywnym typem danych.

Wymagania

Plik nagłówka:<msclr\marshal.h>, <msclr\marshal_windows.h>, <msclr\marshal_cppstd.h lub <msclr\marshal_atl.h>>

Przestrzeń nazw: msclr::interop

marshal_context::marshal_context

Tworzy obiekt używany marshal_context do konwersji danych między zarządzanymi i natywnymi typami danych.

marshal_context();

Uwagi

Niektóre konwersje danych wymagają kontekstu marshala. Aby uzyskać więcej informacji o tym, które tłumaczenia wymagają kontekstu i który plik marshalingowy należy uwzględnić w aplikacji, zobacz Omówienie marshalingu w języku C++.

Przykład

Zobacz przykład marshal_context ::marshal_as.

marshal_context::~marshal_context

marshal_context Niszczy obiekt.

~marshal_context();

Uwagi

Niektóre konwersje danych wymagają kontekstu marshala. Zobacz Omówienie marshalingu w języku C++ , aby uzyskać więcej informacji na temat tego, które tłumaczenia wymagają kontekstu i który plik marshalingowy musi być uwzględniony w aplikacji.

Usunięcie marshal_context obiektu spowoduje unieważnienie danych przekonwertowanych przez ten kontekst. Jeśli chcesz zachować dane po zniszczeniu marshal_context obiektu, musisz ręcznie skopiować dane do zmiennej, która będzie trwała.

marshal_context::marshal_as

Wykonuje marshaling dla określonego obiektu danych, aby przekonwertować go między zarządzanym i natywnym typem danych.

To_Type marshal_as<To_Type>(
   From_Type input
);

Parametry

Wejście
[in] Wartość, którą chcesz przeprowadzić marshaling do zmiennej To_Type .

Wartość zwracana

Zmienna typu To_Type , która jest przekonwertowaną wartością input.

Uwagi

Ta funkcja wykonuje marshaling dla określonego obiektu danych. Tej funkcji należy używać tylko z konwersjami wskazanymi przez tabelę w sekcji Przegląd marshalingu w języku C++.

Jeśli spróbujesz przeprowadzić marshaling pary typów danych, które nie są obsługiwane, marshal_as wygeneruje błąd C4996 w czasie kompilacji. Przeczytaj komunikat dostarczony z tym błędem, aby uzyskać więcej informacji. Błąd C4996 można wygenerować dla nie tylko przestarzałych funkcji. Dwa warunki, które generują ten błąd, próbują przeprowadzić marshaling pary typów danych, które nie są obsługiwane, i próbują użyć marshal_as do konwersji, która wymaga kontekstu.

Biblioteka marshalingowa składa się z kilku plików nagłówkowych. Każda konwersja wymaga tylko jednego pliku, ale możesz uwzględnić dodatkowe pliki, jeśli potrzebujesz innych konwersji. Tabela w tabeli Marshaling Overview in C++ wskazuje, który plik marshalingowy powinien być uwzględniony dla każdej konwersji.

Przykład

W tym przykładzie tworzony jest kontekst do marshalingu z System::String typu do zmiennej const char * . Przekonwertowane dane nie będą prawidłowe po wierszu, który usunie kontekst.

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