Présentation du marshaling en C++
En mode mixte, vous devez parfois marshaler vos données entre les types natifs et managés. Visual Studio 2008 a introduit la bibliothèque de marshaling pour vous aider à marshaler et convertir des données de manière simple.
Il est possible d'utiliser la bibliothèque de marshaling avec ou sans un classe de marshal_context. Certaines conversions requièrent un contexte. D'autres conversions peuvent être implémentées en utilisant la fonction marshal_as. Le tableau suivant répertorie les conversions actuelles prises en charge, suivant qu'elles aient besoin d'un contexte, et suivant le fichier marshaler que vous devez inclure :
Depuis le type |
Jusqu'au type |
Méthode de marshaling |
Inclut le fichier |
---|---|---|---|
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 |
Le marshaling requiert un contexte uniquement lorsque vous marshalez depuis des types de données managés et que le type de données natif auquel vous le convertissez n'a pas de destructeur pour un nettoyage automatique. Le contexte de marshaling détruit le type de données natif alloué dans son destructeur. Par conséquent, les conversions qui requièrent un contexte seront seulement valides jusqu'à ce que le contexte soit supprimé. Pour enregistrer des valeurs marshalées, vous devez copier les valeurs dans vos propres variables.
Notes
Si vous avez incorporé des NULLs dans votre chaîne, le résultat du marshaling de la chaîne n'est pas garanti.Les NULLs incorporés peuvent provoquer la troncature de la chaîne ou ils peuvent être conservés.
Les en-têtes des bibliothèques de marshaling se trouvent dans le répertoire Include dans le sous-répertoire msclr. Cet exemple indique comment inclure le répertoire msclr dans une déclaration d'en-tête Include :
#include "msclr\marshal_cppstd.h"
La bibliothèque de marshaling est extensible afin que vous puissiez ajouter vos propres types de marshaling. Pour plus d'informations sur l'extension de la bibliothèque de marshaling, consultez Comment : étendre la bibliothèque de marshaling.
Dans les versions antérieures, vous pouviez marshaler des données à l'aide de la Platforme Invoke. Pour plus d'informations sur PInvoke, consultez Appel à des fonctions natives à partir de code managé.
Voir aussi
Tâches
Comment : étendre la bibliothèque de marshaling