marshal_context クラス
このクラスは、ネイティブとマネージドの環境の間でデータを変換します。
構文
class marshal_context
解説
コンテキストを必要とするデータ変換には、marshal_context
クラスを使用します。 コンテキストを必要とする変換と、どのマーシャリング ファイルを含める必要があるかについて詳しくは、C++ でのマーシャリングの概要に関する記事を参照してください。 コンテキストを使用する場合のマーシャリングの結果は、marshal_context
オブジェクトが破棄されるまでのみ有効です。 結果を保持するには、データをコピーする必要があります。
同じ marshal_context
をさまざまなデータ変換に使用できます。 この方法でコンテキストを再利用しても、以前のマーシャリング呼び出しの結果には影響しません。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
marshal_context::marshal_context | マネージドとネイティブのデータ型間のデータ変換に使用する marshal_context オブジェクトを構築します。 |
marshal_context::~marshal_context | marshal_context オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
marshal_context::marshal_as | 特定のデータ オブジェクトに対してマーシャリングを実行して、マネージドとネイティブのデータ型間で変換します。 |
要件
ヘッダー ファイル:<msclr\marshal.h>、<msclr\marshal_windows.h>、<msclr\marshal_cppstd.h>、または <msclr\marshal_atl.h>
名前空間: msclr::interop
marshal_context::marshal_context
マネージドとネイティブのデータ型間のデータ変換に使用する marshal_context
オブジェクトを構築します。
marshal_context();
解説
一部のデータ変換では、マーシャリング コンテキストが必要です。 コンテキストを必要とする翻訳と、アプリケーションに含める必要のあるマーシャリング ファイルの詳細については、C++ でのマーシャリングの概要に関する記事を参照してください。
例
marshal_context::marshal_as の例を参照してください。
marshal_context::~marshal_context
marshal_context
オブジェクトを破棄します。
~marshal_context();
解説
一部のデータ変換では、マーシャリング コンテキストが必要です。 コンテキストを必要とする翻訳と、アプリケーションに含める必要のあるマーシャリング ファイルの詳細については、C++ でのマーシャリングの概要に関する記事を参照してください。
marshal_context
オブジェクトを削除すると、そのコンテキストで変換されたデータが無効になります。 marshal_context
オブジェクトが破棄された後もデータを保持する場合は、永続化される変数にデータを手動でコピーする必要があります。
marshal_context::marshal_as
特定のデータ オブジェクトに対してマーシャリングを実行して、マネージドとネイティブのデータ型間で変換します。
To_Type marshal_as<To_Type>(
From_Type input
);
パラメーター
input
[入力] To_Type
変数にマーシャリングしようとする値。
戻り値
input
の値を変換した後の To_Type
型の変数。
解説
この関数は、特定のデータ オブジェクトに対してマーシャリングを実行します。 この関数は、C++ でのマーシャリングの概要に関する記事の表に示されている変換でのみ使用してください。
サポートされていない 2 つのデータ型をマーシャリングしようとすると、marshal_as
は、コンパイル時にエラー C4996 を生成します。 詳細については、このエラーと共に提供されるメッセージを参照してください。 C4996
エラーは、非推奨の関数の場合に加えて、他の状況で生成される可能性もあります。 このエラーを生成する 2 つの条件は、サポートされていない 2 つのデータ型をマーシャリングしようとすることと、コンテキストを必要とする変換に marshal_as
を使おうとすることです。
マーシャリング ライブラリは、複数のヘッダー ファイルで構成されます。 どの変換でもただ 1 つのファイルが必要ですが、他の変換で必要とされる追加ファイルをインクルードすることもできます。 Marshaling Overview in C++
の表は、各変換に含めるマーシャリング ファイルを示しています。
例
この例では、System::String
から const char *
変数型にマーシャリングするためのコンテキストを作成します。 変換されたデータは、コンテキストを削除する行の後では有効になりません。
// marshal_context_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>
using namespace System;
using namespace msclr::interop;
int main() {
marshal_context^ context = gcnew marshal_context();
String^ message = gcnew String("Test String to Marshal");
const char* result;
result = context->marshal_as<const char*>( message );
delete context;
return 0;
}