共用方式為


C++ 中封送處理的概觀

在混合模式中,您必須有方式封送處理您在原生及 Managed 資料和 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*

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 封送處理為原生資料型別,您要轉換的原生型別沒有自動的解構函式清除時,封送處理才需要內容,。 封送處理內容在其解構函式中終結配置的原生資料型別。 因此,只有在內容刪除後需要內容的轉換才有效,。 若要儲存所有封送處理的值,您必須將值複製到您的變數。

注意事項注意事項

如果您在字串中嵌入 NULL,則無法保證封送處理字串的結果。內嵌 NULL可能導致資料截斷或它們可能儲存。

封送處理程式庫集合中位於指定 msclr 子目錄的 Include 目錄。 這個範例會顯示如何將 msclr 目錄從 include的標頭宣告:

#include "msclr\marshal_cppstd.h"

封送處理程式庫是可擴充的,以便將封送處理型別。 如需封送處理程式庫的詳細資訊,請參閱 如何:擴充封送處理程式庫

在較舊的版本中,您可以使用 平台叫用 以封送處理資料。 如需 PInvoke 的詳細資訊,請參閱 從 Managed 程式碼呼叫原生函式

請參閱

工作

如何:擴充封送處理程式庫

其他資源

C++ 支援程式庫