最終更新日 2024-09-25

hmV8 (秀丸マクロ用 .NET Framework ライブラリ via V8 ECMAScript 2021)

概要

秀丸マクロを、「ECMAScript2021 V8エンジン」で記述可能とするためのライブラリです。

ダウンロード

Windowsのbit数ではなく、秀丸のビット数 Windows OSが64bit版か32bit版かは関係ありません。秀丸エディタが32bit版か64bit版かでダウンロード対象を選択してください。
ダウンロードした後、zipを「ブロック解除(or 許可する)」必須

z当プログラムには「強い厳密な署名」が施してありますので、zipを解凍する際には、「ブロック解除(or 許可する)」してください。
もしくは、zipを解凍した後に、各々のdllに対して「ブロック解除(or 許可する)」してください。
ブロック解除(or 許可する)しないまま、当プログラムを利用することは出来ません。

動作環境

インストール

各種説明は、hmJSとの差分のみ

hmJSとhmV8は、ECMAScriptの「旧」と「新」という関係ですので、基本的にはhmV8はhmJSの上位の互換となります。
このため、このhmV8では、hmJSに対する差分のみの情報を掲載しています。
基本的な機能の説明等は、秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScriptを参照してください。
(繰り返しとなりますが、hmV8ではhmJSには存在するActiveXObjectに対する特別な対応はありません。)

hmV8の意義

秀丸マクロファイルや「.js」ファイルの文字コード

hmV8を利用する秀丸マクロファイルや、.jsファイルは、全て「utf8」の「BOM付き」を前提としています。
但し、他の文字コードでのファイルも扱うことが可能です。

詳細は、「hmJSの基礎中の基礎のAPI」の「SetCodePage」の項目を参照してください。

ソース例① (jsmode相当関数が大部分使える)

#JS = loaddll( hidemarudir + @"\hmV8.dll" );
 
#_ = dllfuncw( #JS, "DoString", R"JS(

message("OK");

moveto(3,4);

)JS"
);
 
freedll(#JS);

ソース例②

#JS = loaddll( hidemarudir + @"\hmV8.dll" );

#_ = dllfuncw( #JS, "DoString", R"(

// .NETアセンブリの読み込みが可能
// "System.Windows.Forms"だけでも問題はない。
lib = host.lib("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

class MyForm {

    constructor(start) {
        this.count = 0;
    }

    SetForm() {
        this.Forms = lib.System.Windows.Forms;
        this.frm= new this.Forms.Form();
        this.frm.Text = "こんにちわ";
    }

    SetButton() {
        this.btn = new this.Forms.Button()
        this.btn.Text = "クリック";
        this.btn.Left = 16;
        this.btn.Top = 16;
        this.btn.Tag = 0;

        // イベントハンドラも作れる
        this.btn.Click.connect((sender, e) => this.btn_Click(sender, e));
        this.frm.Controls.Add(this.btn);
    }

    Show() {
        this.SetForm();
        this.SetButton();

        this.frm.ShowDialog();
    }

    btn_Click(sender, event) {
        this.count++;

        let count = this.count;
        // デバッグモニター用の関数
        hm.OutputPane.Output("ボタンが押されたよ!!" + "\r\n");
        hm.OutputPane.Output(count.toString() + "\r\n");

        // 秀丸マクロの「変数」とのやりとりも自由自在
        const filename2 = hm.Macro.Var('filename2'); // const filename2 = hm.Macro.Var['filename2']; と記述してもOK
        hm.OutputPane.Output(filename2);

        // 秀丸マクロの「変数」とのやりとりも自由自在
        hm.Macro.Var('$count', count.toString() ); // hm.Macro.Var['$count'] = count.toString(); と記述してもOK
        // V8の中から秀丸マクロを一連のコマンドとして実行することも出来る。
        // ECMAScript6なら「テンプレートストリングス」が使えるのでちょうどよい
        hm.Macro.Eval( `
            // アウトプット枠へ出力。秀丸マクロを直接使った原始的な方法
            #OP = loaddll("HmOutputPane.dll");
            #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
            freedll(#OP);
        ` );
    }
}


var f = new MyForm(0);
f.Show();

)"
);

// V8から秀丸マクロへと書き込まれた変数は、当然秀丸マクロからも見える。
message("ボタンは" + $count + "回クリックされました");

freedll(#JS);

Google Chromeに搭載されている V8 エンジンとのバージョン

ChromeのURLアドレスバーに「chrome://version」などと入力することにより、
V8 エンジンのバージョンを知ることが出来ます。
このバージョンと、更新情報のバージョンとを比較すれば、
どの程度バージョンが最新と近いか(使用できる文法が一致するか)、概ね想像が出来るかと思います。

V8のサイトを詳細に追えば、どのバージョンで何が実装されたのか追うことも不可能ではないですが、
V8のソースコードは、年中途絶えることなく、毎日Releaseバージョンが更新され続けていますので、
V8のマニアでもない限り、追っても追いつかないため、無駄だと思われます。

ライセンス