Visual Studio 2017 を使用することをお勧めします

C++ におけるマーシャリングの概要

 

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

混合モードでは、ネイティブ型とマネージ型の間でデータをマーシャリングすることが必要な場合があります。 Visual Studio 2008 は、単純な方法でデータをマーシャリングして変換できるようにするためのマーシャリング ライブラリを導入しました。

マーシャリング ライブラリは、marshal_context クラス ありでもなしでも使用できます。 一部の変換では、コンテキストが必要です。 他の変換は、marshal_as 関数を使用して実装できます。 次の表は、現在サポートされている変換と、コンテキストが必要かどうか、含める必要があるマーシャリング ファイルを示しています。

変換前の型変換後の型マーシャリング メソッドインクルード ファイル
System::String^const char*marshal_contextmarshal.h
const char*System::String^marshal_asmarshal.h
char*System::String^marshal_asmarshal.h
System::String^const wchar_t*marshal_contextmarshal.h
const wchar_t *System::String^marshal_asmarshal.h
wchar_t*System::String^marshal_asmarshal.h
System::IntPtrHANDLEmarshal_asmarshal_windows.h
HANDLESystem::IntPtrmarshal_asmarshal_windows.h
System::String^BSTRmarshal_contextmarshal_windows.h
BSTRSystem::String^marshal_asmarshal.h
System::String^bstr_tmarshal_asmarshal_windows.h
bstr_tSystem::String^marshal_asmarshal_windows.h
System::String^std::stringmarshal_asmarshal_cppstd.h
std::stringSystem::String^marshal_asmarshal_cppstd.h
System::String^std::wstringmarshal_asmarshal_cppstd.h
std::wstringSystem::String^marshal_asmarshal_cppstd.h
System::String^CStringT<char>marshal_asmarshal_atl.h
CStringT<char>System::String^marshal_asmarshal_atl.h
System::String^CStringT<wchar_t>marshal_asmarshal_atl.h
CStringT<wchar_t>System::String^marshal_asmarshal_atl.h
System::String^CComBSTRmarshal_asmarshal_atl.h
CComBSTRSystem::String^marshal_asmarshal_atl.h

マーシャリングにコンテキストが必要なのは、マネージ データ型からネイティブ データ型にマーシャリングし、変換先のネイティブ型に自動クリーンアップ用のデストラクターがない場合のみです。 マーシャリング コンテキストは、デストラクターの中で割り当てられているネイティブ データ型を破棄します。 したがって、コンテキストを必要とする変換は、コンテキストが削除されるまでしか有効ではありません。 マーシャリングされた値を保存するには、独自の変数に値をコピーする必要があります。

System_CAPS_ICON_note.jpg メモ

文字列に NULL が埋め込まれている場合、文字列のマーシャリング結果は保証されません。 埋め込まれた NULL により、文字列が切り詰められたり残されたりする場合があります。

マーシャリング ライブラリ ヘッダーは、インクルード ディレクトリの msclr サブディレクトリにあります。 次の例では、インクルード ヘッダー宣言で msclr ディレクトリをインクルードする方法を示しています。

#include "msclr\marshal_cppstd.h"

マーシャリング ライブラリは、独自のマーシャリング型を追加できるように拡張できます。 マーシャリング ライブラリの拡張の詳細については、「方法: マーシャリング ライブラリを拡張する」を参照してください。

以前のバージョンでは、プラットフォーム呼び出しを使用してデータをマーシャリングできました。 PInvoke の詳細については、「マネージ コードからのネイティブ関数の呼び出し」を参照してください。

C++ のサポート ライブラリ
方法: マーシャリング ライブラリを拡張する

表示: