gpt4 book ai didi

delphi - 如何捕获自定义变体的数组索引

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

我正在阅读有关 TCustomVariantType 的内容,并且想知道当使用一个或多个数组索引调用自定义变体类型的变量时是否有一种方法可以覆盖该行为。如果我使用 a[1] 上的调试 DCU 进行快速调试,其中 a 是一个变体,我会看到 _VarArrayGet 被调用,但它通向 SafeArrayPtrOfIndex 的调用或SafeArrayGetElement ,没有办法提供替代方案。我看到旧版本曾经有一个 VariantManager,但它已被弃用。有没有办法替换_VarArrayGet指针?

最佳答案

How is the system wired up so that a[x] ends up as a call to VarArrayGet(a,[x])?

现代版本的 Delphi 中的编译器内置了变体知识,并将调用硬连线到 VarArrayGet。查看 x86 编译器发出的代码:

d := V[0];

翻译成:

004234D7 6A00             push $00004234D9 6A01             push $01004234DB 6858AF4200       push $0042af58004234E0 8D45C8           lea eax,[ebp-$38]004234E3 50               push eax004234E4 E81BD8FFFF       call @VarArrayGet004234E9 83C410           add esp,$10004234EC 8D45C8           lea eax,[ebp-$38]004234EF E864B8FFFF       call @VarToReal004234F4 DD1D68AF4200     fstp qword ptr [$0042af68]004234FA 9B               wait 

根本没有可用的扩展点。

如果您希望更改行为,最好的选择是使用运行时代码绕行。

关于delphi - 如何捕获自定义变体的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669698/

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