2

我们不能在函数外使用在函数中创建的 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

Line# 001: strHTML := "foobar" 002: oNode := GetNode(strHTML, "body", 0) ---> 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]
}
4

1 回答 1

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]
}
于 2012-11-14T06:46:18.490 回答