質問

IDL とはどういう意味ですか?グーグルで調べてみたところ、これは Interface Definition Language の略で、コンポーネントのインターフェイス定義に使用されることがわかりました。しかし、実際のところ、IDL の目的は何でしょうか?マイクロソフトはそれを使用していますか?

役に立ちましたか?

解決

インターフェイス定義言語(IDL)は、リモートプロシージャコール(RPC)でクライアントとサーバー間の通信を設定するために使用されています。このように日RPC、ONC RPC、DCE RPCなどなどの多くのバリエーションがありました。

基本的に、あなたはRPCメカニズムは、ネットワークを介して機能を呼び出すために必要なコードのスタブを作成できるように、クライアントとサーバー間のインターフェイスを指定するには、IDLを使用します。

RPCは、IDL情報を使用して、クライアントとサーバのスタブ関数を作成する必要があります。これは、Cの関数プロトタイプに非常に似ているが、最終的な結果は、次のような、わずかに異なっている:

+----------------+
| Client         |
|  +----------+  |  +---------------+
|  |   main   |  |  | Server        |
|  |----------|  |  |  +----------+ |
|  | stub_cli |------->| stub_svr | |
|  +----------+  |  |  |----------| |
+----------------+  |  | function | |
                    |  +----------+ |
                    +---------------+

この例では、代わりに同じプログラムでfunctionを呼び出すので、mainは情報をパッケージ化し、別のプロセスにワイヤーを渡ってそれを取得するための責任がある(functionと同じプロトタイプを持つ)クライアントスタブ関数を呼び出します。これは、同じマシンまたは別のマシンすることができ、それは本当に問題ではありません - RPCの利点の一つは、意志でサーバを動き回ることができるようにすることです。

は、サーバーでは、その情報を受信し、それをサーバに渡します「リスナーのプロセスがあります。サーバーのスタブは、情報を受け取り、それをアンパックし、実際の関数に渡します。

実際の関数が、それはする必要があるん何とリターンの情報(両方の戻りコードと任意の[out]または[in,out]変数)をパッケージ化し、クライアントスタブに戻って、それを渡すことができ、サーバスタブに戻ります。

クライアントスタブは、そのをアンパックしmainに戻ってそれを渡します。

実際の内容が少し異なる場合がありますが、その説明は概念的な概要については、十分に良いことがあります。

実際のIDLは次のようになります:

[uuid(f9f6be21-fd32-5577-8f2d-0800132bd567),
    version(0),
    endpoint("ncadg_ip_udp:[1234]", "dds:[19]")]
interface function_iface {
    [idempotent] void function(
        [in] int handle,
        [out] int *status
    );
}

上部にあるすべてのものは、基本的な情報をネットワークされ、その肉はプロトタイプが示されているインタフェース部の内部にあります。これは、IDLコンパイラは、RPCの作業を取得するためにコンパイルし、クライアントとサーバーのコードをリンクするためのxスタブとXサーバ機能を構築することができます。

マイクロソフトは、COMのもののために(私は彼らがMIDLコンパイラを持っていると思う)IDLを使用しません。私もMSのオペレーティングシステム、DCEおよびONC RPCの両方でサードパーティ製品を使用しました。

他のヒント

私は科学的なデータに使用して仕事をしていたインタラクティブデータ言語にもあります分析は、おそらく文脈から、それはそれは、このIDLは何の略かではありませんあなたに明らかです。

IDL はの頭字語です。 インターフェース定義言語 言語を定義したベンダーまたは標準グループに応じて、いくつかのバリエーションがあります。IDL の目的は、サービスを使用したいクライアントがサービスがどのようなメソッドとプロパティ、インターフェイス、サービスを提供するかを知ることができるように、サービスのインターフェイスを記述することです。IDL は通常、バイナリ インターフェイスで使用され、IDL 言語ファイルはバイナリ インターフェイスで使用されるデータ型を記述します。

バイナリ コンポーネントにはいくつかの異なる標準があります。 COTS または市販の市販品, 、クライアントがバイナリ コンポーネントと通信する方法はさまざまですが、伝統的には、あるバージョンの リモート プロシージャ コールまたは RPC 使用されている。そのような 2 つの規格は、 Microsoft 共通オブジェクト モデルまたは COM 標準 そしてその Common Object Request Broker または CORBA 標準. 。コンポーネントには他にも次のような規格があります。 Firefox プラグイン ただし、これらは必ずしも何らかの形式のインターフェイス記述言語を使用するわけではなく、API への標準化されたよく知られたインターフェイスを備えたある種のソフトウェア開発キットまたは SDK を使用します。

IDL によって可能になるのは、バイナリの性質により、さまざまなプログラミング言語やさまざまな環境で使用できるさまざまな種類のサービスを提供するコンポーネントを作成できる柔軟性です。

Microsoft は COM オブジェクトで IDL の方言を使用しており、Microsoft IDL は CORBA IDL と同じではありませんが、共通の言語ルーツを共有しているため類似点はあります。IDL ファイルには、COM オブジェクトによってサポートされるインターフェイスの説明が含まれています。COM では、インプロセス サービス (RPC または直接 DLL 呼び出しを使用する場合があります) またはアウト オブ プロセス サービス (RPC を使用する) を作成できます。COM の背後にある考え方は、クライアントがコンポーネントを使用するには、そのコンポーネントの識別子とインターフェイスを知るだけで十分であるということです。クライアントは COM オブジェクトを要求し、次にクライアントが使用するインターフェイスをサポートする COM オブジェクトのファクトリからクラス オブジェクトを要求し、そのインターフェイスを通じて COM オブジェクトを使用します。

Microsoft は、IDL ファイルを処理してタイプ ライブラリを生成する MIDL コンパイラを提供し、COM オブジェクトのユーザーにインターフェイスに関する情報と、クライアントとサービス間のインターフェイス全体でデータをマーシャリングするために必要なスタブを提供します。

データのマーシャリングとは基本的に、スタブがクライアントから提供されたデータを取得し、それをパッケージ化して、何らかのアクションを実行してデータを送り返すサービスに送信することを意味します。このデータの送受信は、RPC サービスまたは直接の DLL 関数呼び出しを通じて行われる場合があります。サービスからの応答は、クライアントに適した形式に変換されてクライアントに提供されます。したがって、基本的にマーシャリング機能は アダプター (アダプターの設計パターンを参照) または ブリッジ (ブリッジのデザインパターンを参照) クライアントとサービスの間。

私の経験では C++ を使用した Visual Studio には、サンプルを生成してこれを試すために使用できるウィザードが多数含まれています。興味がある場合は、ワークスペースを作成し、そのワークスペースでコントロールを生成するための ATL プロジェクトを作成し、それをテストするための単純な MFC ダイアログ プロジェクトを作成できます。COM コントロールに ATL を使用すると、後で調査できる多くの詳細が非表示になり、単純な MFC ダイアログ プロジェクトを使用してコンテナーを簡単に作成できます。また、Visual Studio で利用可能な ActiveX コントロール テスト コンテナ ツールを使用して、予備テストを実行し、メソッドとプロパティがどのように機能するかを確認することもできます。

codeproject.com などの Web サイトには、多数のサンプル プロジェクトもあります。たとえばここにあります 1 つは C を使用して、COM の背後にある醜い配管をすべて公開します そしてここにあります ATL を使用せずに C++ を使用するもの.

これは、COMの時代に使用されている言語は、(おそらく)言語に依存しない形でのインタフェースを定義することです。

これは、他のアプリケーションに公開されたサービスとの通信に使用するインターフェイスを定義します。

あなたはSOAPを使用する場合は、WSDLについて知っていますよ。 WSDLは、IDLの別の形態です。 IDLは、通常のMicrosoft COMまたはCORBA IDLを指します。

IDLは2例で極めて重要です。 1. exeファイルサーバのプロキシ/スタブDLLを作成します。 オートメーションサーバーのタイプライブラリを作成するには2.ます。

リンクでIDLの基礎のための非常に良い記事があります

IDLを研究するために、与えられているコンパイラの独自のIDLヘッダファイルはVC ++パッケージのサブディレクトリを含める読みすることをお勧めします。

scroll top