HmNodeJS・やってはいけないこと

  • 概要

    ここでは、HmNodeJSを利用するうえで、やってはいけないことを解説します。

  • 「jsを束縛して起動中のチャンネル」に、「異なるjsを束縛し直す」のはダメ

    既に特定のチャンネルにjsを束縛してnode.jsサーバーが起動している状態では、
    同じチャンネルに別のjsを束縛しなおしてはいけません。

    具体的な例をみていきましょう。

    • 1回目の実行

      50050に「HmNodeSample.js」を割り当てて実行した。

      
      #V8 = loaddll( hidemarudir + @"\hmV8.dll" );
      
      #_ = dllfuncw( #V8, "DoString", R"ES6(
      
      host.lib(clr, "HmNodeClient" );
      
      var currentmacrodirectory = hm.Macro.Var["currentmacrodirectory"];
      
      var client = new clr.HmNodeClient(50050, currentmacrodirectory + "/HmNodeSample.js");
      client.Start();
      
      var NameValueCollection = clr.System.Collections.Specialized.NameValueCollection;
      var param = new NameValueCollection();
      param.Add("word1", "C:/abc/♬e.mac");
      param.Add("myppp", "そそそそそ");
      var res = client.GetResponse(param);
      
      console.log(res.Data);
      console.log(res.CallCount);
      
      hm.Macro.Var["$data"] = res.Data + res.CallCount;
      
      )ES6"
      );
      
      message $data;
      
      freedll( #V8 );
      
      


    • 以下のようなスクリプトへと書き換えて、2回目の実行

      以下のスクリプトのように、同じ50050番に、別のスクリプト「HmNodeExample.js」を割り当てて実行。

      これは許されません。
      すでに50050番にHmNodeSample.jsが紐づけされ、実行中なためです。

      一度50050番に、特定の.jsを束縛すると、全ての秀丸を終了するまでは、束縛は解けません。
      (.jsの変更は無視され、既に束縛済みだったJSが利用されます)

      
      #V8 = loaddll( hidemarudir + @"\hmV8.dll" );
      
      #_ = dllfuncw( #V8, "DoString", R"ES6(
      
      host.lib(clr, "HmNodeClient" );
      
      var currentmacrodirectory = hm.Macro.Var["currentmacrodirectory"];
      
      var client = new clr.HmNodeClient(50050, currentmacrodirectory + "/HmNodeExample.js");
      client.Start();
      
      var NameValueCollection = clr.System.Collections.Specialized.NameValueCollection;
      var param = new NameValueCollection();
      param.Add("word1", "C:/abc/♬e.mac");
      param.Add("myppp", "おおおおおおお");
      var res = client.GetResponse(param);
      
      console.log(res.Data);
      console.log(res.CallCount);
      
      hm.Macro.Var["$data"] = res.Data + res.CallCount;
      
      )ES6"
      );
      
      message $data;
      
      freedll( #V8 );