最終更新日 2024-09-25

秀丸マクロとJavaメソッドの複数回の行き来

これまで比較的1つのメソッドだけを呼び出す方法を紹介してきましたが、
hmJavaVMの使用方法はそのような形に限定されません。

時には、1つのメソッドで実行を完了するのではなく、
一旦秀丸のマクロへと処理を戻し、適当に処理をして、
再度Javaの別メソッドを呼び出したい、全体の構成が楽になる、ということも普通に考えられます。

マクロから異なるメソッドを複数回呼び出す。

呼び出している間に変数も変更する。

MyMultiCallTest.mac
#JVM = loaddll( hidemarudir + @"\hmJavaVM.dll");

#num = 0;

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "Reset");

#num = #num + 30;
message str(#num);

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "Method1");

#num = #num + 30;
message str(#num);

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "Method2");


#num = #num + 30;
message str(#num);

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "Method3");

message str(#num);

#_ = dllfuncw( #JVM, "CallMethod", "MyClass2", "Reset");

  
freedll( #JVM );

Java側

Java側にもそれぞれに対応するメソッドを定義してみましょう。

MyClass2.java
import hidemaru.Hm;

public class MyClass2 {

    static final int add = 100;
    static int cnt = 0;

    public static long Reset() {
        cnt = 0;

        return 1;
    }

    public static long Method1() {
        int num = (int)Hm.Macro.getVar("#num");
        num = num + add;
        Hm.Macro.setVar("#num", num);
        cnt++;

        return 1;
    }
    public static long Method2() {
        int num = (int)Hm.Macro.getVar("#num");
        num = num + add;
        Hm.Macro.setVar("#num", num);
        cnt++;

        return 1;
    }
    public static long Method3() {
        int num = (int)Hm.Macro.getVar("#num");
        num = num + add;
        Hm.Macro.setVar("#num", num);
        cnt++;

        Hm.debugInfo(cnt);

        return 1;
    }
}

メッセージダイアログや、秀丸デバッグモニターのメッセージを見ることで、
処理が継続されている様がわかることでしょう。