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

时间:2012-11-13 06:12:04

标签: 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(strHTML)
    return doc.getElementsByTagName(strNode)[nIndex]
}
  

错误:0x80070005 - 访问被拒绝。

     

具体来说:innerText

     

第#001行:strHTML:=“foobar”002:oNode   := GetNode(strHTML,“body”,0)   ---&GT; 003:MsgBox,oNode.innerText 005:{006:doc:= ComObjCreate(“HTMLfile”)007:doc.write(strHTML)008:   返回,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]
}

1 个答案:

答案 0 :(得分:0)

您必须将 doc 设为全球。

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]
}