gpt4 book ai didi

delphi - 关于给接口(interface)分配GUID的问题

转载 作者:行者123 更新时间:2023-12-02 04:32:26 25 4
gpt4 key购买 nike

我在 Delphi XE 中编写了这段代码,它从 GUID const 分配接口(interface)的 GUID。代码编译正常,但我想知道这是否是有效的声明?

const
IID_IFoo: TGUID = '{00000000-6666-6666-6666-666666666666}';
type
IFoo = interface(IDispatch)
[IID_IFoo]
//properties
//methods
end;

最佳答案

可以这样做,但问题是您为什么要这样做?

如果您希望引用接口(interface)的 GUID 而不是接口(interface)的名称,那么只要该接口(interface)具有关联的 IID (GUID),那么您就可以在需要 TGUID 的地方使用接口(interface)名称:

type
IFoo = interface(IDispatch)
['{00000000-6666-6666-6666-666666666666}']
//properties
//methods
end;

// meanwhile, elsewhere in the project...

sFooIID := GUIDToString(IFoo);

这是一个不太“嘈杂”的接口(interface)声明,避免了您声明/引用 IID 常量的可能性,该常量实际上与您认为的接口(interface)没有关联(或者尚未与该接口(interface)关联) IID 根本)。

const
IID_Foo = '{00000000-6666-6666-6666-666666666666}';
IID_Bar = '{00000000-6666-6666-6666-777777777777}';

type
IFoo = interface(IDispatch)
[IID_Bar] // WHOOPS!
:
end;

IBar = interface(IDispatch)
// WHOOPS again!!
:
end;


// Meanwhile, elsewhere in the project

sBarID := GUIDToString(IID_Bar); // Works, but is the IID of IFoo, not IBar
sFooID := GUIDToString(IID_Foo); // Works, but is an IID not associated with any interface

使用接口(interface)本身作为接口(interface) IID,而不是使用单独的 const 声明,可以消除出现这些错误的可能性。

当为 IID 使用单独的常量声明时(如果绝对必须这样做),您可以通过使用需要 IID 的接口(interface)来防止这些问题之一。但如果特定接口(interface)使用了错误的 IID,这可能会让事情变得更糟:

// Cannot make the mistake of using an interface as a GUID if it has no IID at all

sBarID := GUIDToString(IBar); // Does not compile - IBar has no IID


// But if it's the wrong IID then you get results that are "correct" but not expected:

a := GUIDToString(IFoo);
b := GUIDToString(IID_Foo);

a <> b

关于delphi - 关于给接口(interface)分配GUID的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701304/

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