Udostępnij za pośrednictwem


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

Inne zasoby

Biblioteka obsługi języka C++