Rational Developer for System z
PL/I for Windows, Version 7.6, プログラミング・ガイド

完全な PL/I プロシージャー

完全な PL/I プログラムは、図 32 に示してあります。このサンプル PL/I プログラムは、JNI を介していくつかの呼び出しを 行います。

開始時に、呼び出し側 Java オブジェクト myObject への 参照が PL/I プロシージャーに渡されます。PL/I プログラムはこの参照を使用して、呼び出し側からの情報を 取得します。最初の情報は、GetObjectClass JNI 関数を使用して 検索される呼び出し側オブジェクトのクラスです。このクラス値は、対象となる Java オブジェクト内の Java 整数 フィールドの ID を取得するために、GetFieldID JNI 関数に よって使用されます。この Java フィールドは、フィールド名 myInt、および JNI フィールド 記述子 I (フィールドが整数フィールドであることを示す) の 指定によってさらに詳細に識別されます。その後、Java 整数フィールドの値が GetIntField JNI 関数を使用して検索され、PL/I プログラムによって表示されます。

取得した Java 整数を表示した後、PL/I プログラムは、呼び出し側 Java オブジェクト内の整数フィールドの更新に使用 する PL/I 整数の入力をユーザーに促します。この PL/I 整数値を使用して、SetIntField JNI 関数によって呼び出し側 Java オブジェクトの 整数フィールドが更新されます。

PL/I プログラムが終了すると Java に制御が戻され、新しく更新された Java 整数が Java プログラムによって表示されます。

図 32. PL/I サンプル・プログラム #3 - 整数の引き渡し
 *Process Limits( Extname( 31 ) ) Margins( 1, 100 ) ;
 *Process Dllinit xinfo(def);
 *Process Default( IEEE );
 plijava_demo: package exports(*);

  Java_passNum_pliShowInt:
  Proc( JNIEnv , myjobject )
    external( "_Java_jPassInt_pliShowInt" )
    options( byvalue nodescriptor linkage(stdcall) );

   %include jni;

   Dcl myClazz          Type jClass;
   Dcl myFID            Type jFieldID;
   Dcl myJInt           Type jInt;
   dcl rtnJInt          Type jInt;
   Dcl myJObject        Type jObject;
   Dcl pliReply         Char(132) Varz;
   Dcl nullPtr          Pointer;

   Display('  ');

   /* Get information about the calling Class              */
   myClazz = GetObjectClass(JNIEnv, myJObject);

   /* Get Field ID for int field from Java                 */
   myFID = GetFieldID(JNIEnv, myClazz, "myInt", "I");

   /* Get Integer value from Java                          */
   myJInt = GetIntField(JNIEnv, myJObject, myFID);

   display('From  PLI: Integer retrieved from Java is: ' || trim(myJInt) );
   display('From  PLI: Enter an integer to be returned to Java:' )
          reply(pliReply);

   rtnJInt = pliReply;

   /* Set Integer value in Java from PL/I                  */
   nullPtr = SetIntField(JNIEnv, myJObject, myFID, rtnJInt);

  End;

 end;

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)