とある「秀丸のプロセスAの.dll内の値」→「別秀丸のプロセスBのマクロ変数」へと値を伝搬するのに、 秀丸マクロ変数を使うことが出来ます。
2つのdllを用意してみましょう。
using System; using System.Windows.Forms; using Hidemaru; namespace HmTest { partial class HmTestForm { protected void MethodCreate() { Hm.Macro.Var["#abc"] = 300; } protected void MethodTick() { } protected void MethodDestroy() { } } }
using System; using System.Windows.Forms; using Hidemaru; namespace HmTest { partial class HmTestForm { protected void MethodCreate() { var b = (int)(dynamic)Hm.Macro.Var["#abc"]; b += 1000; System.Diagnostics.Trace.WriteLine(b); } protected void MethodTick() { } protected void MethodDestroy() { } } }
// 秀丸プロセスA側 #HMNET_A = loaddll( hidemarudir + @"\hm.NET.dll" ); // 秀丸プロセスA側で、秀丸マクロ変数に値を書き込む #r = dllfuncw( #HMNET_A, "SetDetachMethod", currentmacrodirectory + @"\ProcessA.dll", "HmTest.HmTestClass", "OnDetachMethod" ); #r = dllfuncw( #HMNET_A, "CallMethod", currentmacrodirectory + @"\ProcessA.dll", "HmTest.HmTestClass", "CreateForm" ); // 秀丸プロセスBが誕生 newfile; // 秀丸マクロ独特の機能として、プロセスを跨いでも、「秀丸マクロ変数」の値は維持されている、というものがある。 // 新たなプロセスなので改めて hm.NET.dllも読み込む必要がある。 #HMNET_B = loaddll( hidemarudir + @"\hm.NET.dll" ); // 秀丸プロセスB側で、秀丸マクロ変数の値を読み込む #r = dllfuncw( #HMNET_B, "SetDetachMethod", currentmacrodirectory + @"\ProcessB.dll", "HmTest.HmTestClass", "OnDetachMethod" ); #r = dllfuncw( #HMNET_B, "CallMethod", currentmacrodirectory + @"\ProcessB.dll", "HmTest.HmTestClass", "CreateForm" );
一度マクロを実行し、「デバッグモニター」にどのように順次表示されるか確認しましょう。
デバッグモニターには1300と表示されます。
プロセスAのdllで秀丸マクロ変数へと書き込んだ値が、秀丸マクロという独特なプロセスを跨ぐという特性を利用して、 プロセスBのdllへと伝搬される様子が確認出来るかと思います。