システム関数 JavaLib.invoke は、ネイティブ Java™ オブジェクトまたはクラスのメソッドを呼び出し、値を戻すことができます。JavaLib.invoke は、Java アクセス関数の 1 つです。
JavaLib.invoke( identifierOrClass javaObjIdOrClass in, method STRING in {, argument anyEglPrimitive in}) returns (result anyJavaPrimitive)
ネイティブ Java メソッドが値を戻す場合、結果フィールドはオプションです。
次のことが該当します。
長さが一致しない場合については、『代入』を参照してください。
この引数は、文字列リテラル、または CHAR 型、DBCHAR 型、MBCHAR 型、UNICODE 型の変数のいずれかです。オブジェクトの ID を指定する場合は、後述の例のように、その ID を objID にキャストする必要があります。EGL は、大/小文字の区別がある引数値の先頭と最後から、1 バイトのブランクと 2 バイトのブランクを削除します。
オブジェクト ID を作成するまでは、オブジェクト上のメソッドをコードで呼び出すことはできません。後述の例では、PrintStream オブジェクトを参照する java.lang.System.out を使用して、この点を説明します。
この引数は、文字列リテラル、または CHAR 型、DBCHAR 型、MBCHAR 型、UNICODE 型の変数のいずれかです。大/小文字の区別があるストリングの先頭と最後から、1 バイトのブランクと 2 バイトのブランクが削除されます。
『Java アクセス (システム・ワード)』に記述したキャストが必要な場合があります。
Java の型変換の規則が適用されます。 例えば、int として宣言されたメソッド・パラメーターに short を渡しても、エラーは発生しません。
精度が失われるのを避けるために、Java の double には EGL の float 変数を使用し、 Java の float には EGL の smallfloat 変数を使用してください。それ以外の EGL の型を使用すると、多くの場合、結果としての値が丸められます。
呼び出し側プログラムのメモリー領域は、メソッドの実行内容にかかわらず、変更されません。
// Java Date クラスのコンストラクターを呼び出し // 新規オブジェクトを ID "date" に割り当てます。 JavaLib.storeNew( (objId)"date", "java.util.Date"); // 新規 Date オブジェクトの toString メソッドを呼び出し // 出力 (本日の日付) を chaItem に割り当てます。 // キャスト (objId) が存在しない場合、"date" は // オブジェクトではなくクラスを参照します。 chaItem = JavaLib.invoke( (objId)"date", "toString" ); // Java System クラスの標準出力ストリームを // ID "systemOut" に割り当てます。 JavaLib.storeField( (objId)"systemOut", "java.lang.System", "out" ); // 出力ストリームの println メソッドを呼び出し // 今日の日付を出力します。 JavaLib.invoke( (objID)"systemOut", "println", chaItem ); // "java.lang.System.out" を // 前の行の第 1 引数として使用すると、 // 無効です。この引数は、すでにオブジェクト・スペース内にある // 識別子であるか、クラス名であることが必要だからです。 // この引数は static フィールドを参照できません。
JavaLib.invoke の処理中にエラーが発生すると、SysVar.errorCode は、以下の表にリストされている値に設定されます。
SysVar.errorCode の値 | 説明 |
---|---|
00001000 | 呼び出されたメソッドによって、またはクラスの初期化の結果として、例外がスローされました。 |
00001001 | オブジェクトが NULL でした。または指定された ID がオブジェクト・スペース内にありませんでした。 |
00001002 | 指定された名前の public メソッド、フィールド、またはクラスが存在しないか、ロードできません。 |
00001003 | EGL プリミティブ型が、Java で想定される型と同じではありません。 |
00001004 | メソッドが NULL を戻したか、メソッドが値を戻さないか、またはフィールドの値が NULL でした。 |
00001005 | 戻り値が、戻り変数の型と一致しません。 |
00001006 | NULL へキャストする引数のクラスをロードできませんでした。 |
00001007 | メソッドまたはフィールドに関する情報の取得中に、SecurityException または IllegalAccessException がスローされました。または、final 宣言されたフィールドの値を設定しようとしました。 |
00001009 | クラス名ではなく、ID を指定する必要があります。メソッドまたはフィールドが静的ではありません。 |
関連概念
関連タスク
EGL 文およびコマンドの構文図