Com 0x80070005-访问被拒绝。对于从函数返回的Dom节点

Com 0x80070005-访问被拒绝。对于从函数返回的Dom节点,com,autohotkey,Com,Autohotkey,我们不能使用在函数外部的函数中创建的COM对象吗 strHTML := "<html><body>foobar</body></html>" oNode := GetNode(strHTML, "body", 0) msgbox % oNode.innerText GetNode(strHTML, strNode, nIndex) { doc := ComObjCreate("HTMLfile") doc.write(strHT

我们不能使用在函数外部的函数中创建的COM对象吗

strHTML := "<html><body>foobar</body></html>"
oNode := GetNode(strHTML, "body", 0)
msgbox % oNode.innerText

GetNode(strHTML, strNode, nIndex) {
    doc := ComObjCreate("HTMLfile") 
    doc.write(strHTML)
    return doc.getElementsByTagName(strNode)[nIndex]
}
strHTML:=“foobar”
oNode:=GetNode(strHTML,“body”,0)
msgbox%oNode.innerText
GetNode(strHTML、strNode、nIndex){
doc:=ComObjCreate(“HTMLfile”)
文件写入(strHTML)
return doc.getElementsByTagName(strNode)[nIndex]
}
错误:0x80070005-访问被拒绝

特别是:innerText

第001行:strHTML:=“foobar”002:oNode :=GetNode(strHTML,“body”,0) --->003:MsgBox,oNode.innerText 005:{006:doc:=ComObjCreate(“HTMLfile”)007:doc.write(strHTML)008: Return,doc.getElementsByTagName(strNode)[nIndex]009:}010:退出 011:出口

全局变量和byref参数都没有帮助


@SouthStExit这不起作用,因此将其包装到函数中变得毫无意义。但是正如Lexikos提到的,我看到现在这个对象被破坏了,所以它变得不可访问

oNode1 := GetNode("<html><body>foo</body></html>", "body", 0)
oNode2 := GetNode("<html><body><div>bar</div></body></html>", "div", 0)

msgbox % oNode1.innerText "`n" oNode2.innerText

GetNode(strHTML, strNode, nIndex) {
    global doc
    doc := ComObjCreate("HTMLfile") 
    doc.write(strHTML)
    return doc.getElementsByTagName(strNode)[nIndex]
}
oNode1:=GetNode(“foo”,“body”,0)
oNode2:=GetNode(“条”,“div”,0)
msgbox%oNode1.innerText“`n”oNode2.innerText
GetNode(strHTML、strNode、nIndex){
全球文件
doc:=ComObjCreate(“HTMLfile”)
文件写入(strHTML)
return doc.getElementsByTagName(strNode)[nIndex]
}
您必须使文档成为全局文档

strHTML:=“foobar”
oNode:=GetNode(strHTML,“body”,0)
msgbox%oNode.innerText
返回
GetNode(strHTML、strNode、nIndex){
全球文件
doc:=ComObjCreate(“HTMLfile”),doc.write(strHTML)
return doc.getElementsByTagName(strNode)[nIndex]
}

这可能是因为当本地变量中包含的引用被释放时,文档被销毁。如果您在没有函数的情况下编写等效代码(即在访问oNode之前编写doc:=”),您将得到相同的结果。谢谢Lexikos。我现在明白了。因此,在函数之外使用节点是不实际的。
strHTML :=  "<html><body>foobar</body></html>"
oNode :=    GetNode(strHTML, "body", 0)
msgbox %    oNode.innerText
return

GetNode(strHTML, strNode, nIndex) {
    global  doc
    doc :=  ComObjCreate("HTMLfile"), doc.write(strHTML)
    return  doc.getElementsByTagName(strNode)[nIndex]
}