Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Elementy członkowskie
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
wkład
[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;
}