とある「秀丸のプロセスAの.dll内の値」→「別秀丸のプロセスBのマクロ変数」へと値を伝搬するのに、 秀丸マクロ変数を使うことが出来ます。
2つのdllを用意してみましょう。
#include "HmCppInvoke.h" using namespace Hidemaru; using namespace std; extern "C" __declspec(dllexport) THmNumber test() { Hm.funcDllExport(); Hm.Macro.setVar(L"#abc", 300); return 1; }
#include "HmCppInvoke.h" using namespace Hidemaru; using namespace std; extern "C" __declspec(dllexport) THmNumber test() { Hm.funcDllExport(); THmNumber b = Hm.Macro.getVar<THmNumber>(L"#abc"); b += 100; Hm.OutputPane.output(to_wstring(b) + L"\r\n"); return 1; }
// 秀丸プロセスA側 #dll_A = loaddll(currentmacrodirectory + @"\dll1.dll"); #r = dllfuncw(#dll_A, "test"); freedll(#dll_A); // 秀丸プロセスBが誕生 newfile; // 秀丸マクロ独特の機能として、プロセスを跨いでも、「秀丸マクロ変数」の値は維持されている、というものがある。 // 秀丸プロセスB側で、秀丸マクロ変数の値を読み込む #dll_B = loaddll(currentmacrodirectory + @"\dll2.dll"); #r = dllfuncw(#dll_B, "test"); freedll(#dll_B);
一度マクロを実行し、「アウトプット枠」にどのように順次表示されるか確認しましょう。
最初に300、次に1300と表示されます。
プロセスAのdllで秀丸マクロ変数へと書き込んだ値が、「秀丸マクロという独特なプロセスを跨ぐというバッファー」であるかのような特性を利用して、 プロセスBのdllで取得できることがわかるかと思います。