Sdílet prostřednictvím


Přehled zařazování v C++/CLI

V smíšeném režimu je někdy nutné zařaďte data mezi nativními a spravovanými typy. Knihovna zařazování pomáhá zařazovat a převádět data jednoduchým způsobem. Knihovna zařazování se skládá ze sady funkcí a marshal_context třídy, která provádí zařazování pro běžné typy. Knihovna je definována v těchto hlavičkách v adresáři include/msclr pro vaši edici sady Visual Studio:

Záhlaví Popis
marshal.h marshal_context zařazování funkcí bez kontextu
marshal_atl.h Funkce pro zařazování typů ATL
marshal_cppstd.h Funkce pro zařazování standardních typů C++
marshal_windows.h Funkce pro zařazování typů Windows

Výchozí cesta ke složce msclr je něco takového v závislosti na tom, jakou edici máte, a číslo buildu:

C:\\Program Files (x86)\\Microsoft Visual Studio\\Preview\\Enterprise\\VC\\Tools\\MSVC\\14.15.26528\\include\\msclr

Knihovnu zařazování můžete použít s marshal_context třídou nebo bez. Některé převody vyžadují kontext. Jiné převody je možné implementovat pomocí funkce marshal_as . Následující tabulka uvádí podporované aktuální převody, jestli vyžadují kontext a jaký zařazovací soubor musíte zahrnout:

Z typu Psaní Zařazování metody Zahrnout soubor
System::String^ const char * marshal_context marshal.h
const char * System::String^ marshal_as marshal.h
Char* System::String^ marshal_as marshal.h
System::String^ const wchar_t* marshal_context marshal.h
const wchar_t * System::String^ marshal_as marshal.h
Wchar_t* System::String^ marshal_as marshal.h
System::IntPtr ZPRACOVÁNÍ marshal_as marshal_windows.h
ZPRACOVÁNÍ System::IntPtr marshal_as marshal_windows.h
System::String^ BSTR marshal_context marshal_windows.h
BSTR System::String^ marshal_as marshal.h
System::String^ bstr_t marshal_as marshal_windows.h
bstr_t System::String^ marshal_as marshal_windows.h
System::String^ std::string marshal_as marshal_cppstd.h
std::string System::String^ marshal_as marshal_cppstd.h
System::String^ std::wstring marshal_as marshal_cppstd.h
std::wstring System::String^ marshal_as marshal_cppstd.h
System::String^ Znak CStringT<> marshal_as marshal_atl.h
Znak CStringT<> System::String^ marshal_as marshal_atl.h
System::String^ wchar_t CStringT<> marshal_as marshal_atl.h
wchar_t CStringT<> System::String^ marshal_as marshal_atl.h
System::String^ CComBSTR marshal_as marshal_atl.h
CComBSTR System::String^ marshal_as marshal_atl.h

Zařazování vyžaduje kontext pouze v případě, že zařazujete ze spravovaného do nativních datových typů a nativní typ, na který převádíte, nemá destruktor pro automatické vyčištění. Kontext zařazování zničí přidělený nativní datový typ v jeho destruktoru. Převody, které vyžadují kontext, budou platné pouze do doby, než se kontext odstraní. Pokud chcete uložit všechny zařazované hodnoty, musíte hodnoty zkopírovat do vlastních proměnných.

Poznámka

Pokud máte v řetězci vložené NULLznaky, výsledek zařazování řetězce není zaručený. Vložené NULLznaky můžou způsobit zkrácení řetězce nebo jejich zachování.

Tento příklad ukazuje, jak zahrnout adresář msclr do deklarace hlavičky include:

#include "msclr\marshal_cppstd.h"

Knihovna zařazování je rozšiřitelná, takže můžete přidat vlastní typy zařazování. Další informace o rozšíření knihovny zařazování naleznete v tématu Postupy: Rozšíření zařazování knihovny.

Viz také

Knihovna podpory C++
Postupy: Rozšíření knihovny zařazování