とある「秀丸のプロセスAの.dll内の値」→「別秀丸のプロセスBのマクロ変数」へと値を伝搬するのに、 秀丸マクロ変数を使うことが出来ます。
2つのdllを用意してみましょう。
using System; using System.Runtime.InteropServices; using HmNetCOM; namespace NET4COMServer { [ComVisible(true)] [Guid("BD55F2A6-9ED0-4F4F-9D37-E6B84BE63272")] public class NET4COMServer { public long SetMyVariable() { int myvariable = 300; Hm.Macro.Var["#MyVariable"] = myvariable; Hm.OutputPane.Output($"{myvariable}\r\n"); return 1; } public long GetMyVariable() { int myvariable = (int)(dynamic)Hm.Macro.Var["#MyVariable"]; Hm.OutputPane.Output($"{myvariable}\r\n"); return 1; } } }
// 秀丸プロセスA側 #obj_A = createobject( currentmacrodirectory + @"\NET4COMServer.dll", "NET4COMServer.NET4COMServer"); #r_A = member(#obj_A, "SetMyVariable"); releaseobject #obj_A; // 秀丸プロセスBが誕生 newfile; // 秀丸マクロ独特の機能として、プロセスを跨いでも、「秀丸マクロ変数」の値は維持されている、というものがある。 #MyVariable = #MyVariable + 1000; // 新たなプロセスなので改めて createobjectする必要がある。 #obj_B = createobject( currentmacrodirectory + @"\NET4COMServer.dll", "NET4COMServer.NET4COMServer"); #r_B = member(#obj_B, "GetMyVariable"); releaseobject #obj_B;
一度マクロを実行し、「アウトプット枠」にどのように順次表示されるか確認しましょう。
最初に300、次に1300と表示されます。
プロセスAのdllで秀丸マクロ変数へと書き込んだ値が、「秀丸マクロという独特なプロセスを跨ぐというバッファー」であるかのような特性を利用して、 プロセスBのdllで取得できることがわかるかと思います。