在 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 程式碼呼叫原生函式。