gpt4 book ai didi

delphi - 在 Delphi 6 类声明中分配接口(interface)指针?

转载 作者:行者123 更新时间:2023-12-03 14:41:35 25 4
gpt4 key购买 nike

尽管进行了多年的 Delphi 编程,我还是遇到了一种我从未见过的支持 IUnknown 的类声明样式:

TBCUnknown = class(TBCBaseObject, IUnKnown)
private
FRefCount: integer;
FOwner : Pointer;
protected
function IUnknown.QueryInterface = NonDelegatingQueryInterface;
function IUnknown._AddRef = NonDelegatingAddRef;
function IUnknown._Release = NonDelegatingRelease;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
...

正如您所看到的,类方法到 IUnknown 接口(interface)方法的分配是在类声明中完成的。这对我来说看起来真的很奇怪,特别是因为我不知道在调用构造函数之前如何分配 IUnknown 方法。这是某种编译时快捷方式,用于在类的方法和该类接受的接口(interface)的接口(interface)指针之间进行分配,并稍后在运行时解析?如果有人可以提供一些有关其工作原理以及 Delphi 习惯用法支持这种构造的信息,我想知道。

最佳答案

它的名字是 Method Resolution Clause它允许您指定哪个方法实际实现指定的接口(interface)方法。这意味着实现方法可以具有与接口(interface)中声明的方法不同的名称(但方法签名仍然必须匹配)。如果没有该子句,Delphi 将根据名称自动解析实现方法。

在您的示例中,声明意味着 IUnknown._AddRefTBCUnknown.NonDelegatingAddRef 实现,IUnknown._ReleaseTBCUnknown 实现.NonDelegatingRelease.

据我所知,从一开始当语言添加接口(interface)支持时就支持这一点。您可能没有注意到它,因为它不经常使用或不需要。

关于delphi - 在 Delphi 6 类声明中分配接口(interface)指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com