秀丸マクロと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 void Reset(String args[]) {
            cnt = 0;
        }
    
        public static void Method1(String args[]) {
            int num = (int)Hm.Macro.getVar("#num");
            num = num + add;
            Hm.Macro.setVar("#num", num);
            cnt++;
        }
        public static void Method2(String args[]) {
            int num = (int)Hm.Macro.getVar("#num");
            num = num + add;
            Hm.Macro.setVar("#num", num);
            cnt++;
        }
        public static void Method3(String args[]) {
            int num = (int)Hm.Macro.getVar("#num");
            num = num + add;
            Hm.Macro.setVar("#num", num);
            cnt++;
    
            Hm.debugInfo(cnt);
        }
    }
    

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