Ü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.
Hinweis |
---|
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