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 - アクセスが拒否されました。

具体的には:

行番号 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]
}
4

1 に答える 1

0

ドキュメントをグローバルにする必要があります。

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 に答える