gpt4 book ai didi

delphi - 如何在Delphi中查找IHTMLDocument2是否等于IDispatch文档?

转载 作者:行者123 更新时间:2023-12-03 14:51:33 37 4
gpt4 key购买 nike

我有一个 TEmbeddedWB ( https://sourceforge.net/projects/embeddedwb/ ),其中有一个 iFrame。我必须查明特定的 HTML 标签是否位于该 iFrame 内。我的 iFrame 对象是 IHTMLFrameBase2,而标签是 IHTMLElement。我知道 iFrame.contentWindow.document (这是一个 IHTMLDocument2)与 Tag.document 相同。但 Tag.document 是一个 IDispatch 对象,因此以下给出错误:

if iFrame.contentWindow.document = Tag.document then ShowMessage('In iFrame')
else ShowMessage('Not in iFrame');

我知道这两个对象是相同的,因为Watch List可以显示它们的内存地址:

Watch List

但我无法从代码中获取他们的地址。我尝试过的:

Addr(iFrame.contentWindow.document) // Gives variable required error
@iFrame.contentWindow.document // Gives variable required error
Pointer(iFrame.contentWindow.document) //Compiles, but gives wrong address
Format('%p',[iFrame.contentWindow.document]) //Compiles, but gives EConvertError

注意:如果我逐行运行,则监视列表显示的地址在每一行代码后都会发生变化,无论代码是否影响 Web 浏览器。

最佳答案

来自rules of COM :

It is required that any call to QueryInterface on any interface for a given object instance for the specific interface IUnknown must always return the same physical pointer value. This enables calling QueryInterface(IID_IUnknown, ...) on any two interfaces and comparing the results to determine whether they point to the same instance of an object (the same COM object identity).

所以,向他们询问他们的 IUnknown 接口(interface),然后进行比较。

var
disp: IDispatch;
doc: IHTMLDocument2;
....
if (disp as IUnknown) = (doc as IUnknown) then
....

关于delphi - 如何在Delphi中查找IHTMLDocument2是否等于IDispatch文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027070/

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