Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
| Hlavička | 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 |
| uklízečka* | 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 | KLIKA | marshal_as | marshal_windows.h |
| KLIKA | 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.