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^ |
定数の 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の秒が挿入されている場合は、文字列をマーシャリングする結果は保証されません。NULLの埋め込み秒数は文字列が切り捨てられることも、これらは保持される場合があります。
マーシャリング ライブラリは、マーシャリングの独自の種類を追加できるように拡張できます。マーシャリング ライブラリの拡張に関する詳細については、 方法: マーシャリング ライブラリを拡張するを参照してください。
以前のバージョンでは、 プラットフォーム呼び出しを使用してデータをマーシャリングする可能性があります。PInvoke の詳細については、「マネージ コードからのネイティブ関数の呼び出し」を参照してください。