Omówienie kierowania w języku C++
W trybie mieszanym, czasem musisz skierować dane między typami macierzystymi i zarządzanymi.Wprowadzona została kierująca biblioteka Visual Studio 2008, by pomóc skierować i skonwertować dane w prosty sposób.
Można użyć biblioteki kierującej z lub bez marshal_context — Klasa.Pewne konwersje wymagają kontekstu.Inne konwersje można zaimplementować za pomocą funkcji marshal_as.W poniższej tabeli zestawiono bieżąco obsługiwane konwersje zależnie, czy wymagają one kontekst i jaki plik skierowany musisz dołączyć:
Z typu: |
Do typu |
Metoda skierowana |
Plik dołączany |
---|---|---|---|
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 |
HANDLE |
marshal_as |
marshal_windows.h |
HANDLE |
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<znak> |
marshal_as |
marshal_atl.h |
CStringT<znak> |
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 |
Kierowanie wymaga kontekstu, tylko wtedy, gdy kierujesz z danych zarządzanych do natywnych typów a typy natywne, do których jest konwertowanie na nie mają destruktora do automatycznego oczyszczania.Kontekst kierujący niszczy przydzielony natywny typ danych w swoim destruktorze.W związku z tym konwersje, które wymagają kontekstu, będą prawidłowe tylko do momentu usunięcia kontekstu.Aby zapisać wszelkie kierowane wartości, należy skopiować wartości do własnych zmiennych.
[!UWAGA]
Jeśli posiadasz osadzone wartości NULL w ciągu, to wynik kierowania ciągu nie jest pewny.Osadzone wartości NULL mogą powodować, że ciąg będzie ucięty lub może być zachowany.
Nagłówki biblioteki kierowania znajdują się w katalogu dołączenia w podkatalogu msclr.Ten przykład pokazuje jak dołączyć do katalogu msclr deklarację nagłówka dołączenia:
#include "msclr\marshal_cppstd.h"
Biblioteka kierowania jest rozszerzalna, tak, że można dodawać własne typy dotyczące kierowania.Aby uzyskać więcej informacji dotyczących rozszerzania biblioteki kierowania, zobacz Porady: rozszerzanie biblioteki kierowania.
We wcześniejszych wersjach, można kierować dane za pomocą Platforma wywołania.Aby uzyskać więcej informacji o PInvoke, zobacz Wywoływanie funkcji natywnych z kodu zarządzanego.
Zobacz też
Zadania
Porady: rozszerzanie biblioteki kierowania