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

概要

LuaJITの例題のひとつとなります。

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

hmLJがLuaJITに付け加えている機能とは、まさにここになります。
「秀丸マクロ」のスコープと「hmLJ/LuaJIT」のスコープとの値のやり取りをみてみましょう。

Luaの配列はindexが「1」から始まるということに注意しましょう。

#L = loaddll( hidemarudir + "\\" + "hmLJ.dll" );

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

#_ = dllfunc(#L, "SetNumVar", "var1", 100);
#num = dllfunc(#L, "GetNumVar", "var1");
message(str(#num));

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

// bbbの[2]をresult_numという変数に代入
#_ = dllfunc(#L, "DoString", "result_num = bbb[2]" );

// resultの数値を得る
#result_num = dllfunc(#L, "GetNumVar", "result_num");

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

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

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

// bbb[1]の値と-200の絶対値を足しこんで、result_numという変数に代入
#_ = dllfunc(#L, "DoString", ""+
    "result_num = bbb[1] + math.abs(-200)\n"
);

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

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

freedll(#L);

PICTURE