Freigeben über


Übersicht des Marshallens in C++

Im gemischten Modus müssen Sie die Daten zwischen systemeigenen und verwalteten Typen in einigen Fällen marshallen.Visual Studio 2008 führt die Marshallingbibliothek ein, um Daten auf eine einfache Weise zu marshallen und zu konvertieren.

Sie können die Marshallingbibliothek mit oder ohne marshal_context-Klasse verwenden.Einige Konvertierungen erfordern einen Kontext.Andere Konvertierungen können mithilfe der marshal_as-Funktion implementiert werden.In der folgenden Tabelle werden die aktuellen unterstützten Konvertierungen aufgelistet, ob sie einen Kontext erfordert, und welche Marshall Datei beinhalten Sie müssen:

Vom Typ

So eingeben

Marshallen Methode

Includedatei

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^

<char>CStringT

marshal_as

marshal_atl.h

<char>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

Marshalling erfordert einen Kontext nur, wenn Sie aus verwaltetem in systemeigene Datentypen marshallen und der systemeigene Typ, den Sie konvertieren, einen Destruktor für die automatische Bereinigung nicht.Der Kontext des Marshallens zerstört den zugeordneten systemeigenen Datentyp in ihrem Destruktor.Daher sind Konvertierungen, die einen Kontext erfordert, nur gültig, bis der Kontext gelöscht wird.Um alle gemarshallten Werte zu speichern, müssen Sie die Werte in Ihren eigenen Variablen kopieren.

HinweisHinweis

Wenn Sie NULL s in der Zeichenfolge eingebettet haben, wird das Ergebnis des Marshallens der Zeichenfolge nicht sichergestellt.Das eingebettete NULL s kann bewirken, dass die Zeichenfolge abgeschnitten wird, oder sie beibehalten werden kann.

Die Marshallingbibliothek ist erweiterbar, sodass Sie eigene Marshalling von Typen hinzufügen können.Weitere Informationen zum Erweitern der Marshallingbibliothek finden Sie Gewusst wie: Erweitern der Marshallingbibliothek.

In früheren Versionen konnten Sie Daten marshallen, indem Sie Plattformaufruf frei.Weitere Informationen zu PInvoke finden Sie unter Aufrufen systemeigener Funktionen aus verwaltetem Code.

Siehe auch

Aufgaben

Gewusst wie: Erweitern der Marshallingbibliothek

Weitere Ressourcen

C++-Unterstützungsbibliothek