Поделиться через


Общие сведения о маршалировании в 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 см. в разделе Вызов неуправляемых функций из управляемого кода.

См. также

Задачи

Практическое руководство. Расширение библиотеки маршалинга

Другие ресурсы

Библиотека поддержки C++