将概述在C++
在混合模式中,您有时会需要排列在本机和托管类型之间的数据。 Visual Studio 2008 表示封送处理库帮助您具有和转换数据。一种简单的方法。
可以使用封送处理库有或没有 marshal_context 类。 这些转换需要上下文。 使用 marshal_as 功能,其他变换中实现。 下表列出了支持的当前转换,它们是否需要上下文,,以及送文件必须包括:
从类型 |
对类型 |
送方法 |
包含文件 |
---|---|---|---|
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<字符> |
marshal_as |
marshal_atl.h |
CStringT<字符> |
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的,封送该字符串的结果不保证。嵌入 NULLs 可能会导致该字符串被截断或他们可以保留。
封送处理库是可扩展的,因此您可以添加自己送的类型。 有关扩展封送处理库的更多信息,请参见 如何:扩展封送处理库。
使用 平台调用,在早期版本中,可以将数据。 有关 PInvoke的更多信息,请参见从托管代码调用本机函数。