hmEdgeJSとhmV8を混ぜて使う

  • hm**の言語シリーズは混ぜて使うことが出来ます。

    原則的にどの組み合わせでも混ぜて利用することが可能ですが、
    ここでは両方ともES6/V8エンジンでありながら、
    利用可能な拡張部分のライブラリが異なる組み合わせとなる

    • nodeライブラリが利用出来るhmEdgeJS
    • .NETが利用出来るhmV8

    を考えてみましょう。

    この2つの組み合わせは、利点が多い組み合わせの1つと言えるでしょう。

  • 混ぜてみた例

    JSON.stringifyやJSON.parse、
    「hmEdgeJS⇔秀丸マクロ変数」「秀丸マクロ変数⇔hmV8」が簡単であるため、
    JSONを介在にして、ECMAScriptのオブジェクトを簡単に伝達することが出来ます。

    • 秀丸マクロ側のソース

      hmEdgeJSとhmV8を両方実行する。

      mytest.mac
      #NODE = loaddll( hidemarudir + @"\hmEdgeJS.dll");
      
      #r = dllfuncw( #NODE, "DoFile", currentmacrodirectory + @"\mynodetest.js" );
      
      freedll(#NODE);
      
      
      #V8 = loaddll( hidemarudir + @"\hmV8.dll" );
      
      #r = dllfuncw( #V8, "DoFile", currentmacrodirectory + @"\myv8test.js" );
      
      freedll( #V8 );
      
    • hmEdgeJS用のjs側のソース

      mynodetest.js
      let mydata = {
          arr: [ 1,2,3 ],
          file: __filename // __filenameという変数はnodejs独特のもの
      };
      
      let myDataJSON = JSON.stringify(mydata);
      
      console.log(myDataJSON);
      
      // このJSONデータを秀丸マクロの変数として格納しておく
      hm.Macro.Var["$Transaction_JSON"] = myDataJSON;
      
    • hmV8用のjs側のソース

      myv8test.js
      // 秀丸マクロの変数にあるJSONを引き出して…
      let myDataJSON = hm.Macro.Var["$Transaction_JSON"];
      
      // JavaScriptのObjectとして解釈する
      let mydata = JSON.parse(myDataJSON);
      let arr = mydata.arr.toString();
      let file = mydata.file.toString();
      
      console.log(mydata);
      
      var lib = host.lib( "System.Windows.Forms" );
      
      // Windows Formが簡単に使えるのは.NETの利点。
      var TForms = lib.System.Windows.Forms;
      TForms.MessageBox.Show( arr + " / " + file );