[ 新規に投稿する ]

runProcessの返り値のオブジェクトとライフサイクルNo.10500
こみやんま さん 24/12/24 15:45 [ コメントを投稿する ]
  以下みたいな風にするとエラーになるのがちょっとわかりにくいんじゃないかなぁと


jsmode "JScript\\" + currentmacrofilename;

js {
debuginfo(2);

var fso = createobject("Scripting.FileSystemObject");

function main() {

    var cmdProcess = hidemaru.runProcess("curl", ".", "stdio", "sjis");

    cmdProcess.onClose = onClose;
}

function onClose() {
    console.log("onClose");
}

main();

}



C++やC#だと、「そりゃ当然ダメに決まってるっしょ」的な感じですが、
JavaScript的(あるいはスクリプト的)な考え方だと、なぜエラー?
という感じになっちゃうような気がします。

多分修正するのが難しそうだから、
ヘルプか何かの段階で工夫したようがいいかもしれないですねぇ。

・cmdProcess 自体を main に刺しておく
・cmdProcess 自体をグローバルにしておく
・cmdProcess を return で返して、そちらをグローバルにしておく、

(まぁ要するにcmdProcessのリファレンスカウンタをなんらかの形で維持する)
[ ]
RE:10500 runProcessの返り値のオブジェクトとライフサイクルNo.10501
秀丸担当 さん 24/12/24 17:41 [ コメントを投稿する ]
  curlだとなぜか再現はしませんでしたが、適当な存続するexeだとエラーとなりました。
これはグローバルにしたほうがよくて、ローカルで書いた場合はやむを得ないと思います。

WebView2やletにしたらいいかというと、そういうわけではなく、WebView2はインタンスの保持がすごく曖昧なようです。(以前にも少し触れましたがturukame.3:10917)
スコープを抜けても保持されたりして、なんだかよくわからないタイミングで解放されたりして、WebView2のほうが危ないようです。
[ ]

[ 新規に投稿する ]