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 );