次の方法で共有


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;
}