gpt4 book ai didi

delphi - 在接口(interface)定义中使用相同的 GUID 有危险吗?

转载 作者:行者123 更新时间:2023-12-03 15:30:40 25 4
gpt4 key购买 nike

假设:

1) HelpfulUserAtSO 用从他的生产代码复制的片段回答了我的问题:

type
IReqBase = Interface(IInterface)
['{B71BD1C3-CE4C-438A-8090-DA6AACF0B3C4}']
procedure FillWithTemplateData;
end;

2)我认为很好的答案!并盲目地将其复制到我的生产代码中。

3a) 我们都分发我们的应用程序,并且用户 X 希望在他的计算机上安装这两个可执行文件。
后果是什么?

3b) 我收购了 HelpfulUserAtSO 的公司,并希望将他的代码(包含接口(interface)定义)集成到我的代码(包含副本。假设没有范围冲突)。
后果是什么?

毕竟 GUID 应该是“全局唯一的”...

最佳答案

如果不在同一进程中使用相同的 GUID,则定义相同的 GUID 是安全的。但如果,例如如果您通过 COM 访问它们,这肯定会令人困惑。

如果您在同一进程中使用具有相同 GUID 的不同接口(interface),例如通过共享 Delphi 代码单元,您可能肯定会遇到问题。按照惯例,唯一的 GUID 应该定义唯一的签名(即方法集),因此代码可能会认为给定的类实例实现了接口(interface)的所有方法,但事实并非如此。因此,内部执行查找表 (IMT) 将不匹配。调用方法时你会得到很多A/V。

IMT interface table

看看at this very complete article有关接口(interface)如何工作以及内部 IMT 查找表是什么的详细信息。相同的 GUID 意味着相同的 IMT 表,但您的情况并非如此,因此它只会在运行时中断。

关于delphi - 在接口(interface)定义中使用相同的 GUID 有危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143111/

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