「秀丸マクロ」のスコープと「hmLN」のスコープとの値のやり取り

概要

秀丸マクロでは直接は「マネージdll」を取り扱うことが出来ません、
「秀丸マクロ」⇔「hmLN」で値のやりとりをし、
hmLNがマネージdllを処理し、結果を秀丸マクロで受け取るといった手順が多くなります。

スコープ間の値のやりとり

「秀丸マクロ」のスコープと「hmLN」のスコープとの値のやり取りをみてみましょう。

hmLNの内部スクリプトとして用意されているLuaの配列はindexが「1」から始まる点にも注意してください。

#MNG = loaddll( hidemarudir + "\\" + "hmLN.dll" );

// テーブル{1,2,3}をbbbに代入
#_ = dllfuncw(#MNG, "DoString", "bbb = {1,2,3}\n");

#_ = dllfuncw(#MNG, "SetNumVar", "var1", 100);
#num = dllfuncw(#MNG, "GetNumVar", "var1");
message(str(#num));

#_ = dllfuncw(#MNG, "DoString", "bbb[2] = var1\n" );

// テーブルbbbの[2]をresult_numという変数に代入
#_ = dllfuncw(#MNG, "DoString", "result_num = bbb[2]" );

// result_numの値を秀丸マクロ側に得る
#result_num = dllfuncw(#MNG, "GetNumVar", "result_num");

// 表示
message(str(#result_num));

// hmLNのスコープにグローバル変数nameとして「武田信玄」という文字列を代入
#_ = dllfuncw(#MNG, "SetStrVar", "name", "武田信玄");

// 今設定した値を秀丸マクロ側に取得
$name = dllfuncstrw(#MNG, "GetStrVar", "name");
message($name);

// bbb[1]の値と-200の絶対値を足しこんで、result_numという変数に代入
#_ = dllfuncw(#MNG, "DoString", "result_num = bbb[1] + clr.System.Math.Abs(-200)" );

// それを秀丸マクロ側に得る
#result_num = dllfuncw(#MNG, "GetNumVar", "result_num");

// 文字列として表示
message(str(#result_num));

freedll(#MNG);

PICTURE