関数内で作成された 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]
}