Freigeben über


Übersicht über das Marshaling in C++

Im gemischten Modus müssen Sie die Daten zwischen systemeigenen und verwalteten Typen manchmal marshallen. Mit Visual Studio 2008 wurde die Marshallingbibliothek eingeführt, mit der Sie Daten auf einfache Weise marshallen und konvertieren können.

Sie können die Marshallingbibliothek mit oder ohne eine marshal_context-Klasse verwenden. Einige Konvertierungen erfordern einen Kontext. Andere Konvertierungen können mithilfe der marshal_as-Funktion implementiert werden. Die folgende Tabelle enthält eine Liste der aktuell unterstützten Konvertierungen und Informationen dazu, ob sie einen Kontext benötigen und welche Marschalldatei Sie hinzufügen müssen:

Von Typ

in Typ

Marschallmethode

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^

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

Marshalling erfordert nur einen Kontext, wenn Sie von verwalteten in systemeigene Datentypen marshallen und der systemeigene Typ, den Sie konvertieren, keinen Destruktor zur automatischen Bereinigung besitzt. Der Marshallingkontext zerstört den zugeordneten systemeigenen Datentyp in seinem Destruktor. Daher sind Konvertierungen, die einen Kontext erfordern, nur gültig, bis der Kontext gelöscht wird. Um alle gemarshallten Werte zu speichern, müssen Sie die Werte in Ihre eigenen Variablen kopieren.

Hinweis

Wenn Sie NULL in die Zeichenfolge eingebettet haben, ist das Ergebnis des Marshallens der Zeichenfolge nicht garantiert.Durch eine eingebettete NULL kann die Zeichenfolge abgeschnitten oder beibehalten werden.

Die Marshallingbibliotheksheader sind im Includeverzeichnis im Unterverzeichnis "msclr" gespeichert. Dieses Beispiel zeigt, wie das Verzeichnis "msclr" einer Includeheaderdeklaration hinzugefügt wird:

#include "msclr\marshal_cppstd.h"

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

In früheren Versionen konnten Sie Daten mithilfe eines Plattformaufrufs marshallen. Weitere Informationen über PInvoke finden Sie unter Aufrufen systemeigener Funktionen aus verwaltetem Code.

Siehe auch

Aufgaben

Gewusst wie: Erweitern der Marshallingbibliothek

Weitere Ressourcen

C++-Unterstützungsbibliothek