分散アプリケーションでのインターフェイスの使い方
オブジェクト モデルの利用:インデックス への移動
VCL アプリケーションでは、インターフェイスは、COM と SOAP 分散オブジェクトモデルの基本的な要素です。Delphi は、これらの技術に対する基底クラスを提供しています。この基底クラスは、IInterface インターフェイス メソッドを実装しているだけである、TInterfacedObject の基本的なインターフェイス機能を拡張するものです。
COM を使用する場合、クラスとインターフェイスの定義は IInterface でなく IUnknown で行われます。IUnknown と IInterface に意味的な違いはありません。IUnknown は、Delphi のインターフェイスを COM の定義に適合させる手段にすぎません。COM クラスは、クラス ファクトリとクラス識別子(CLSID)を使用するための機能を追加します。クラス ファクトリは、CLSID を使ってクラスのインスタンスを作成する役割を担います。CLSID は COM クラスの登録と操作のために使用されます。クラス ファクトリとクラス識別子を持つ COM クラスは CoClasses と呼ばれます。CoClasses は QueryInterface のバージョン管理機能を利用することで、ソフトウェア モジュールが更新されても、実行時に QueryInterface を呼び出してオブジェクトの現在の機能を問い合わせることができます。
古いインターフェイスの新しいバージョンは、オブジェクトのすべての新しいインターフェイスや機能と同様に、新しいクライアントに対して直ちに使用可能になります。同時に、オブジェクトは既存のクライアントのコードと完全な互換性を保ちます。メソッドとパラメータが一定で、インターフェイス実装が隠されているため、再コンパイルの必要はありません。COM アプリケーションでは、開発者がパフォーマンスの改善やその他の内部的な理由により実装を変更する場合でも、そのインターフェイスに依存するクライアントのコードを壊すことはありません。COM テクノロジーについては、「COM テクノロジーの概要」を参照してください。
SOAP を使ってアプリケーションを配布する場合、それぞれのインターフェイスが RTTI(実行時型情報)を持っていなければなりません。{$M+} スイッチを使ってインターフェイスをコンパイルすると、コンパイラはそのインターフェイスに RTTI を付加します。このようなインターフェイスを「起動可能インターフェイス」と呼びます。起動可能インターフェイスの下位も起動可能です。しかし、起動可能インターフェイスの派生元が別のインターフェイス(起動が可能ではないインターフェイス)である場合、クライアント アプリケーションが呼び出せるのは、起動可能インターフェイスおよびその下位インターフェイスに定義されたメソッドだけです。起動が可能ではない上位を継承するメソッドは、型情報を使ってコンパイルされないので、クライアントが呼び出すことができません。
起動可能インターフェイスを定義する最も簡単な方法は、IInvokable からインターフェイスを派生させることです。IInvokable が {$M+} スイッチを使ってコンパイルされている点を除けば、IInvokable と IInterface はまったく同じです。SOAP を使って配布する Web サービス アプリケーションおよび起動可能インターフェイスの詳細は、「Web サービスの使い方」を参照してください。