Lazarus/FPC中的接口:多重继承

4
我正在尝试创建一个Shell扩展程序,在Windows资源管理器的“信息提示”中提供JPEG文件的EXIF信息,并使用Lazarus制作x64 DLL。
请问,Lazarus是否支持使用接口进行多重继承?如果支持,该如何操作呢?
例如,下面的示例:
type
  IInfoTips = interface(IPersistFile, IQueryInfo)

感谢您,马克。
2个回答

0

这两个接口在Free Pascal/Lazarus的shlobj中定义,就像在Delphi中一样。如果符号在Delphi生命周期内更改了单元,则我们会尝试将它们放入更新的单元中,但那里有很多积压。

所有这些都应该与Delphi兼容,也许如果您解释一下哪些地方不像预期的那样工作,那会更容易些。

在Arnaud的评论之后添加:

不,它并没有。对象在Pascal中实现接口。我真的不明白为什么这真的很重要。当然,这是一点语法糖,但由于任何Delphi风格的接口都实现了Iunknown,因此您可以查询另一个接口的接口:

uses activex;

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

在我看来,您没有回答问题。问题是“FPC是否支持接口的多重继承”。即使在最新版本中,Delphi“非托管”也不支持。只有针对.Net的Delphi支持。FPC呢?我猜两者都不支持... - Arnaud Bouchez
这都是很久以前的事了,所以我不知道为什么答案和问题不匹配。无论如何,我已经复查了问题并回答了它。 - Marco van de Voort
很抱歉,您似乎仍未回答问题。问题不在于接口的实现,而在于接口定义本身。问题是接口是否可以具有多重继承,就像C#或Java中那样。这种接口的多重继承可能会有其好处。我回到这个老问题是因为我需要它,发现Delphi不允许它,并想确保我没有错过任何东西,并且确实没有由Delphi(但是Delphi for .Net)实现多重继承。这个很好的功能仍在QC循环中...并且尚未在FPC中实现... - Arnaud Bouchez
我的第二个答案的第一个单词是“不”。其余部分是我为什么看不到好处以及解决方法。 - Marco van de Voort

0

不,FPC中的接口尚不支持多重继承。

您可以让实现类从两个接口中继承:

type
  TMyInfoTips = class(TInterfacedObject, IPersistFile, IQueryInfo)

但是不在接口层面上,就像你所希望的那样。这样的语句无法编译:

type
  IInfoTips = interface(IPersistFile, IQueryInfo)

你只能从单个接口类型进行“继承”。

Delphi也不支持它。只有已废弃的Delphi for .Net编译器支持...但是因为.Net/C# IR支持(并期望)该功能。

我也在Delphi或FPC中缺少这个功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接