Общие сведения о маршалировании в C++
В смешанном режиме, иногда требуется маршалинг свои данные и размещения между управляемыми. в Visual Studio 2008 введена библиотеки маршалинга для облегчения маршалинг и преобразования данных в простом способом.
Можно использовать библиотеку маршалинга с параметрами или без Класс marshal_context. Некоторые преобразования требуется контекста. Другие преобразования можно реализовать с помощью функции marshal_as. В следующей таблице перечислены поддерживаемые текущие преобразования, требуется ли они контекста и какой маршала файл, должен включать:
От типа |
Печать |
Метод Marshal |
Включите файл |
---|---|---|---|
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 |
Маршалинг требуется контекст только при маршалируете из управляемой в собственные типы данных и собственный тип, в который требуется выполнить преобразование не имеет деструктор автоматического очистить. Контекст маршалинга удаляет выбранный собственный тип данных в деструкторе его. Поэтому преобразования, требующих контекста, допустимы только до тех пор, пока контекст не удаляется. Для сохранения всех маршалированные значений необходимо скопировать значения к пользовательским переменным.
Примечание
Если имеются внедренные NULL в строку, не гарантирован результат маршалинг строка.Внедренный NULL может привести к строке быть усеченным или они могут быть сохранены.
Заголовки библиотеки маршалинга расположены в папке включение в подкаталоге msclr. В этом примере показано, как включить каталог msclr в объявлении заголовка включение:
#include "msclr\marshal_cppstd.h"
Библиотека маршалинга может быть расширена для добавления собственных типов маршалинга. Дополнительные сведения о расширенном библиотеки маршалинга см. в разделе Практическое руководство. Расширение библиотеки маршалинга.
В более ранних версиях можно было маршалинг данных с помощью Вызов неуправляемого кода. Дополнительные сведения о PInvoke см. в разделе Вызов неуправляемых функций из управляемого кода.
См. также
Задачи
Практическое руководство. Расширение библиотеки маршалинга