最終更新日 2024-09-25

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

概要

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

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

hmPyのIronPythonと、秀丸マクロの変数とのやりとりは、本来「hm.Macro.Var["xxxx"] = yyyy などで、取得や代入が出来ます。

よって、以下のソースのような例を実際に記述する、ということは、ほとんど考えられません。
しかし、IronPythonではなく、秀丸マクロ側から直接値を渡したり取得したりする方法も一応提供されている、
ということを頭の片隅に覚えておいてもよいでしょう。

#PY = loaddll( hidemarudir + @"\hmPy.dll" );

#_ = dllfuncw(#PY, "DoString", R"IPY(
import clr         # .NET フレームワーク系を取り扱えるようにするための大元のリファレンス
import System     # .NET のSystemネームスペースをインポート
)IPY"
);


#_ = dllfuncw(#PY, "DoString", "bbb = [1,2,3]");          // Listをbbbに代入

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

#_ = dllfuncw(#PY, "DoString", "bbb[1] = var1" );

// Listの[1]をresultという変数に代入
#_ = dllfuncw(#PY, "DoString", "result_num = bbb[1]" );

// resultの値を「文字列に変換して」秀丸マクロ側に得る
#result_num = dllfuncw(#PY, "GetNumVar", "result_num");

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

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

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

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

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

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

freedll(#PY);