データ表現
コンピューティング環境は、ネットワーク アーキテクチャと同様に大きく異なる場合があります。 これらの違いに対応するために、MIDL を使用すると、データの表現方法を変更できます。 アプリケーションがより簡単に処理できる形式にデータを変換することで、開発を簡略化できる場合があります。 ネットワーク経由でより効率的に送信できるように、アプリケーションのデータ形式を変更できます。
[transmit_as] 属性と [represent_as] 属性は、スタブがクライアントとサーバーの間で渡す読み取り可能な型を、クライアントおよびサーバー アプリケーションが使用するユーザー型に関連付けるようコンパイラに指示します。 ユーザー型と読み取り可能な型の間の変換を実行するルーチンと、変換されたデータを保持するために使用されたメモリを解放するルーチンを指定する必要があります。 [transmit_as] IDL 属性または [represent_as] ACF 属性を使用すると、送信の前後にこれらの変換ルーチンを呼び出すようにスタブに指示します。 [transmit_as] 属性を使用すると、ネットワーク経由で転送するために、あるデータ型を別のデータ型に変換できます。 [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 属性に関するこれらの概要について簡単に説明します。