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のほうが危ないようです。

[ ]