次の方法で共有


データ表現

コンピューティング環境は、ネットワーク アーキテクチャと同様に大きく異なる場合があります。 これらの違いに対応するために、MIDL を使用すると、データの表現方法を変更できます。 アプリケーションがより簡単に処理できる形式にデータを変換することで、開発を簡略化できる場合があります。 ネットワーク経由でより効率的に送信できるように、アプリケーションのデータ形式を変更できます。

[transmit_as] 属性と [represent_as] 属性 は、クライアントとサーバーの間でスタブが渡す読み取り可能な型を、クライアントおよびサーバー アプリケーションが使用するユーザー型に関連付けるようコンパイラに指示します。 ユーザー型と透過型の間の変換を実行するルーチンと、変換されたデータを保持するために使用されたメモリを解放するルーチンを指定する必要があります。 [transmit_as] IDL 属性または [represent_as] ACF 属性を使用して、送信の前後にこれらの変換ルーチンを呼び出すようにスタブに指示します。 [transmit_as] 属性を使用すると、1 つのデータ型を別のデータ型に変換して、ネットワーク経由で転送できます。 [represent_as] 属性を使用すると、ネットワークからのデータをアプリケーションに表示する方法を制御できます。

[wire_marshal][user_marshal] 属性は、OSF-DCE IDL に対する Microsoft 拡張機能です。 その構文と機能は、DCE で指定された [transmit_as][represent_as] 属性に似ています。 違いは、データをある型から別の型に変換する代わりに、データを直接マーシャリングするという点です。 これを行うには、クライアント側とサーバー側のデータ バッファーのサイズ設定、クライアント側とサーバー側のデータのマーシャリングとマーシャリング解除、およびサーバー側のデータの解放を行う外部ルーチンを指定する必要があります。 MIDL コンパイラは、必要に応じてこれらの外部ルーチンを呼び出すように NDR エンジンに指示する形式コードを生成します。

[wire_marshal] 属性と [user_marshal] 属性を使用すると、それ以外の場合はプロセス境界を越えて送信できなかったデータ型をマーシャリングできます。 また、型変換に関連するオーバーヘッドが少ないため、[wire_marshal][user_marshal]、実行時にパフォーマンスが向上します。[transmit_as][represent_as]と比較します。 [wire_marshal][user_marshal] 属性は、互いに排他的であり、特定の型の [transmit_as][represent_as] 属性に関しては相互に排他的です。

[wire_marshal] および [user_marshal] 属性の実装は、OSF-DCE 仕様で規定されたマーシャリング規則に従う必要があることに注意してください。 そのため、ワイヤ プロトコルに慣れていない場合は、これらの属性を使用することはお勧めしません。 NDR 構文転送の詳細については、www.opengroup.orgを参照してください。

このセクションでは、次のトピックで、MIDL 属性の概要について簡単に説明します。

  • transmit_as属性とrepresent_as属性する
  • wire_marshal属性とuser_marshal属性する