2012-04-02 18 views
4

Windowsエクスプローラの "infotips"でJPEGファイルにEXIF情報を提供するためにシェル拡張を作成しようとしていますが、x64 DLLを生成するためにLazarusを使用しています。Lazarus/FPCのインターフェイス:複数の継承

Lazarusはインターフェイスで複数の継承をサポートしていますか?例えば

、何かのように:

type 
    IInfoTips = interface(IPersistFile, IQueryInfo) 

おかげで、 マーク

答えて

0

いいえ、FPCのインターフェイスは、まだマルチ継承をサポートしていません。

は何が実装クラスをさせて頂いており行うことができますことは、両方のインタフェースから継承:

type 
    TMyInfoTips = class(TInterfacedObject, IPersistFile, IQueryInfo) 

ではなく、インターフェイスレベルで、あなたが望むように。

単一のインターフェイスタイプからのみ「継承」することができます。

デルファイもサポートしていません。 Delphi for .Net compilerが無かっただけですが、.Net/C#IRはその機能をサポートしています(そして期待しています)。

また、DelphiやFPCではこの機能がありません。

0

は両方のインターフェイスはちょうどデルファイのように、無料パスカル/ラザロのためにshlobjで定義されています。 Delphiの有効期間中にシンボルがユニットを変更した場合は、を試してください。ただし、最近のユニットに入れてください。大きなバックログがあります。

これは主にデルファイと互換性があります。予想通りに動作しないものを説明した方が簡単かもしれません。アルノーのコメントの後に追加されました

んが、それはないん。オブジェクトはパスカルでインタフェースを実装します。とにかくこれを行うことがなぜ本当に重要であるのか、私は本当に分かりません。確かにそれは構文糖のビットですが、任意のデルファイスタイルのインターフェイスがIUnknownのを実装しているので、あなただけの別のインターフェイスのインターフェイスを照会することができます

uses activex; 

var x :IPersistfile; 
    y :IPersistStream; 
begin 
    x.queryinterface(IID_IPersistStream,y); 
end. 
+0

IMHOあなたは質問に答えませんでした。問題は、 "FPCがインタフェースで多重継承をサポートする"ことでした。 Delphiの「管理されていない」は、最新のバージョンでさえもありません。 .NetのためのDelphiだけがしました。 FPCはありますか?私はどちらも思っていません... –

+0

これはあまりにもずっと前ですので、私はなぜ答えと質問の不一致がわかりません。とにかく質問を見直して答えました。 –

+0

あなたはまだ質問に答えるのではないかと心配しています。それはインターフェースの実装ではなく、インターフェース定義そのものに関するものでした。問題は、C#またはJava AFAIRで可能なように、インタフェースが複数継承を持つ可能性があるということでした。このようなインタフェースの多重継承は、メリットをもたらす可能性があります。 Delphiはそれを許さず、何も見逃していないことを確かめたいと思っていました。そして、多重継承は実際にはDelphiによって実装されていませんでした(しかし、Delphi for .NET) 。この素晴らしい機能はまだQCループ内にあります...そして、FPCでは実装されていません... –