Přehled zařazování v jazyku C++
Ve smíšeném režimu je někdy nutné zařadit data mezi nativní a spravované typy.Visual Studio 2008 představuje zařazovací knihovnu umožňující jednoduchým způsobem zařazovat a převádět data.
Zařazovací knihovnu je možné použít s nebo bez marshal_context – třída.Některé převody vyžadují kontext.Ostatní převody mohou být implementovány pomocí funkce marshal_as.Následující tabulka uvádí aktuální podporované převody, zda vyžadují kontext a jaký zařazovací soubor je třeba zahrnout:
Z typu |
Na typ |
Způsob zařazování |
Soubor k zahrnutí |
---|---|---|---|
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 |
POPISOVAČ |
marshal_as |
marshal_windows.h |
POPISOVAČ |
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^ |
CStringT<char> |
marshal_as |
marshal_atl.h |
CStringT<char> |
System::String^ |
marshal_as |
marshal_atl.h |
System::String^ |
CStringT<wchar_t> |
marshal_as |
marshal_atl.h |
CStringT<wchar_t> |
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řazování probíhá ze spravovaných do nativních datových typů a nativní typy, na které je převáděno, nemají destruktor pro automatické vyčištění.Zařazovací kontext ve svém destruktoru zruší přidělený nativní datový typ.Proto převody, které vyžadují kontext, budou platné pouze do zrušení kontextu.Pro uložení jakékoli zařazované hodnoty je třeba zkopírovat hodnoty do vlastních proměnných.
[!POZNÁMKA]
Při zařazení NULL do řetězce, není výsledek zařazování řetězce zaručen.Vložené znaku NULL můžou způsobit zkrácení řetězce nebo můžou být zachovány.
Hlavičkové soubory zařazovací knihovny jsou umístěny v zahrnutém adresáři v podadresáři msclr.Tento příklad ukazuje, jak zahrnout adresář msclr do zahrnuté deklarace hlavičkového souboru:
#include "msclr\marshal_cppstd.h"
Zařazovací knihovna je rozšiřitelná, takže je možné přidat vlastní zařazovací typy.Další informace o rozšíření zařazovací knihovny naleznete v tématu Postupy: Rozšíření knihovny zařazování.
V dřívějších verzích bylo možné zařazovat data pomocí Volání nespravovaného kódu.Další informace o PInvoke naleznete v tématu Volání nativních funkcí ze spravovaného kódu.
Viz také
Úkoly
Postupy: Rozšíření knihovny zařazování