Com 0x80070005-访问被拒绝。对于从函数返回的Dom节点
我们不能使用在函数外部的函数中创建的COM对象吗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
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]
}