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;
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla