共用方式為


在 C++ 中封送處理的概觀

在混合模式下,有時候必須確保您原生和 managed 型別之間的資料。 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 1

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

只有在您封送處理 managed 至原生資料型別,且您正轉換為原生型別不是自動的解構函式清除時,才會封送處理要求內容。 封送處理的內容會終結其解構函式中配置的原生資料型別。 因此,需要內容的轉換可變為有效時才會刪除內容。 儲存任何封送處理的值時,必須將值複製到您自己的變數。

注意事項注意事項

如果您擁有內嵌的NULLs 在字串中的,封送處理字串的結果並不保證成功。內嵌NULLs 可能會導致截斷的字串,或可能會保留。

封送處理是可以擴充的這樣就可以新增您自己的封送處理型別。 如需有關擴充封送處理的文件庫的詳細資訊,請參閱HOW TO:擴充封送處理程式庫

在較早版本中,您無法藉由使用封資料平台叫用。 如需 PInvoke 的詳細資訊,請參閱 從 Managed 程式碼呼叫原生函式

請參閱

工作

HOW TO:擴充封送處理程式庫

其他資源

C++ 支援程式庫