2012-04-02 81 views
4

我試圖創建一個外殼擴展來爲Windows資源管理器「infotips」中的JPEG文件提供EXIF信息,並使用Lazarus,因爲這需要生成一個x64 DLL。Lazarus/FPC中的接口:多繼承

Lazarus是否支持與接口的多重繼承,如果是的話,我該如何去做呢?

例如,像:

type 
    IInfoTips = interface(IPersistFile, IQueryInfo) 

謝謝, 馬克

回答

0

否,在FPC接口不支持多繼承呢。

你可以做的是讓實現類從兩個接口繼承:

type 
    TMyInfoTips = class(TInterfacedObject, IPersistFile, IQueryInfo) 

但不是在接口級,如你所願。這樣的語句不會編譯:

type 
    IInfoTips = interface(IPersistFile, IQueryInfo) 

您只能從單個接口類型「繼承」。

Delphi也不支持它。只有不存在的Delphi for .Net compiler ......但是因爲.Net/C#IR支持(並期望)該功能。

我也在Delphi或FPC中缺少這個功能。

0

兩個接口在shlobj定義爲免費帕斯卡爾/拉撒路,就像德爾福。如果符號在德爾菲終身期間改變了單位,我們嘗試將它們放在更新的單位中,但是那裏存在大量積壓。

所有這些都應該在很大程度上與Delphi兼容,如果你解釋了什麼不能像預期的那樣工作,也許會更容易。

添加後阿爾諾的評論:

不,它不需要。對象在Pascal中實現接口。我真的不明白爲什麼這麼做真的很重要。當然這是一個有點語法糖,但由於任何Delphi風格界面實現的IUnknown,你可以查詢接口的另一個接口:

uses activex; 

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

恕我直言,你沒有回答這個問題。問題是「FPC支持接口中的多重繼承」。德爾福「非託管」不,即使在最新版本。只有德爾福爲.Net做了。 FPC?我猜... – 2016-04-15 12:40:06

+0

這是太久以前,所以我不知道爲什麼答案和問題不匹配。無論如何,我回顧了這個問題並回答了它。 – 2016-04-16 17:46:32

+0

恐怕你仍然不回答這個問題。這不是關於接口的實現,而是接口定義本身。問題是如果一個接口可能具有多重繼承,因爲它可以在C#或Java AFAIR中使用。這種接口的多重繼承可能會有好處。我遇到了這個老問題,因爲我需要它,發現Delphi不允許它,並且想確保我沒有錯過任何東西,並且多繼承實際上不是由Delphi實現的(但是Delphi爲.Net) 。這個不錯的功能仍然在QC循環中...並且沒有在FPC中實現... – 2016-04-18 13:17:54