我試圖創建一個外殼擴展來爲Windows資源管理器「infotips」中的JPEG文件提供EXIF信息,並使用Lazarus,因爲這需要生成一個x64 DLL。Lazarus/FPC中的接口:多繼承
Lazarus是否支持與接口的多重繼承,如果是的話,我該如何去做呢?
例如,像:
type
IInfoTips = interface(IPersistFile, IQueryInfo)
謝謝, 馬克
我試圖創建一個外殼擴展來爲Windows資源管理器「infotips」中的JPEG文件提供EXIF信息,並使用Lazarus,因爲這需要生成一個x64 DLL。Lazarus/FPC中的接口:多繼承
Lazarus是否支持與接口的多重繼承,如果是的話,我該如何去做呢?
例如,像:
type
IInfoTips = interface(IPersistFile, IQueryInfo)
謝謝, 馬克
否,在FPC接口不支持多繼承呢。
你可以做的是讓實現類從兩個接口繼承:
type
TMyInfoTips = class(TInterfacedObject, IPersistFile, IQueryInfo)
但不是在接口級,如你所願。這樣的語句不會編譯:
type
IInfoTips = interface(IPersistFile, IQueryInfo)
您只能從單個接口類型「繼承」。
Delphi也不支持它。只有不存在的Delphi for .Net compiler ......但是因爲.Net/C#IR支持(並期望)該功能。
我也在Delphi或FPC中缺少這個功能。
兩個接口在shlobj定義爲免費帕斯卡爾/拉撒路,就像德爾福。如果符號在德爾菲終身期間改變了單位,我們嘗試將它們放在更新的單位中,但是那裏存在大量積壓。
所有這些都應該在很大程度上與Delphi兼容,如果你解釋了什麼不能像預期的那樣工作,也許會更容易。
添加後阿爾諾的評論:
不,它不需要。對象在Pascal中實現接口。我真的不明白爲什麼這麼做真的很重要。當然這是一個有點語法糖,但由於任何Delphi風格界面實現的IUnknown,你可以查詢接口的另一個接口:
uses activex;
var x :IPersistfile;
y :IPersistStream;
begin
x.queryinterface(IID_IPersistStream,y);
end.
恕我直言,你沒有回答這個問題。問題是「FPC支持接口中的多重繼承」。德爾福「非託管」不,即使在最新版本。只有德爾福爲.Net做了。 FPC?我猜... – 2016-04-15 12:40:06
這是太久以前,所以我不知道爲什麼答案和問題不匹配。無論如何,我回顧了這個問題並回答了它。 – 2016-04-16 17:46:32
恐怕你仍然不回答這個問題。這不是關於接口的實現,而是接口定義本身。問題是如果一個接口可能具有多重繼承,因爲它可以在C#或Java AFAIR中使用。這種接口的多重繼承可能會有好處。我遇到了這個老問題,因爲我需要它,發現Delphi不允許它,並且想確保我沒有錯過任何東西,並且多繼承實際上不是由Delphi實現的(但是Delphi爲.Net) 。這個不錯的功能仍然在QC循環中...並且沒有在FPC中實現... – 2016-04-18 13:17:54