我有一个带有iFrame 的TEmbeddedWB(https://sourceforge.net/projects/embeddedwb/).我必须找出特定的HTML标签是否在iFrame内部.我的iFrame对象是a IHTMLFrameBase2
,而Tag是a 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');
Run Code Online (Sandbox Code Playgroud)
我知道这两个对象是一样的,因为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
Run Code Online (Sandbox Code Playgroud)
注意:如果我逐行运行监视列表显示的地址在每行代码后都会发生变化,无论代码是否影响WebBrowser.
Dav*_*nan 10
要求在特定接口IUnknown的给定对象实例的任何接口上对QueryInterface的任何调用都必须始终返回相同的物理指针值.这样可以在任意两个接口上调用QueryInterface(IID_IUnknown,...)并比较结果以确定它们是否指向对象的同一实例(相同的COM对象标识).
所以,问他们两个人的IUnknown
界面,并进行比较.
var
disp: IDispatch;
doc: IHTMLDocument2;
....
if (disp as IUnknown) = (doc as IUnknown) then
....
Run Code Online (Sandbox Code Playgroud)