秀丸マクロから呼べるJavaの関数の形

ここでは、秀丸マクロから直接呼び出す、hmJavaVM用のメソッドの定義の制約が説明されています。

  • public かつ static

    秀丸マクロから直接呼び出す関数は「publicかつstatic」である必要があります。

  • long もしくは String

    秀丸マクロから直接呼び出す関数は、「引数」や「返り値」が「long」もしくは「String」である必要があります。

    longな理由 longなのは、秀丸マクロが「32bit版だと数値が32bit」「64bit版だと数値が64bit」という2つの系統を1つのJavaソースで吸収するためです。

    ・通常の秀丸エディタ(32bit版)では、秀丸マクロとJavaとの値のやりとりは32bitの範囲へとキャストされます。
    ・一方、秀丸エディタ64bit版では、longの範囲がまるまる利用できます。

    32bit、64bit 両方で利用するソースの場合は、「通常版(32bitの側)で不具合がでないように、intに収まるように注意を払う必要がある、ということとなります。

今回の例では

  • MyTTS.classというclassファイル。
  • MyTTS というクラス
  • パッケージには属さす
  • そこにいくつかのstaticでpublicなメソッドが定義されている。

という単純な例となります。

MyTTS.classとして コンパイルのこと
import hidemaru.Hm;

public class MyTTS {
    public static String func1(String abc, long aa) {
        Hm.debugInfo(500000);
        return "あいうえお♬";
    }

    public static long func2(long a, long b, String c) {
        return a + b;
    }


}

秀丸マクロ側のソース

  • 引数の個数制限

    引数は0個~3個までなら好きに指定できます。

    引数の最大個数が3つまで、というのは少ないという印象を受けるかもしれません。
    しかし、現実問題として多くの引数を渡す必要性が無いのです。
    必要性がない理由としては、後の章にて説明されますが、簡単に触れておくと

    Java側から秀丸マクロ上の変数を直接読み取ることが出来るため、多数の引数として渡す必要性が低い

    ためです。

  • dllfuncw もしくは dllfuncstrw

    返り値が数値なら「dllfuncw」を、返り値文字列なら「dllfuncstrw」を利用します。

test01.macなどと適当に名前を付ける
#JVM = loaddll( hidemarudir + @"\hmJavaVM.dll");
 
$a = dllfuncstrw( #JVM, "CallMethod", "MyTTS", "func1", "dd", 3);

#b = dllfuncw( #JVM, "CallMethod", "MyTTS", "func2", -3, -5, "cc");

freedll( #JVM );

message($a);

message(str(#b));