× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Adele,


I'm trying the GetStringLength but I get an error.


Here's an example of retrieving the contents of a string via the JNI API:

     H DFTACTGRP(*NO) BNDDIR('QC2LE')

      /define OS400_JVM_12
      /define JNI_COPY_STRING_FUNCTIONS
      /copy qsysinc/qrpglesrc,jni

     D String_new      pr                  extproc(*JAVA:'java.lang.String'
     D                                     : *CONSTRUCTOR )
     D                                     like(jstring)
     D   initval                  65535A   varying const
     D GetJniEnv       PR              *

     D memcpy          PR              *   extproc('memcpy')
     D   dst                           *   value
     D   src                           *   value
     D   size                        10U 0 value

     D sleep           PR            10I 0 extproc('sleep')
     D   secs                        10i 0 value

     D teststr         s                   like(jstring)
     D isCopy          s                   like(jboolean)
     D len             s                   like(jsize)
     D char            s                   like(jchar) based(p_Char)
     D unicode         s             20C
     D output          s             20A

      /free

           teststr = String_new('Welcome to RPG400-L!');
           JNIENV_P = GetJNIEnv();

           len = GetStringLength(JNIENV_P: teststr);
           if (ExceptionCheck(JNIENV_P) = JNI_TRUE);
               ExceptionDescribe(JNIENV_P);
               ExceptionClear(JNIENV_P);
               sleep(5);
               len = 0;
           endif;

           p_char = GetStringChars(JNIENV_P: teststr: isCopy);
           if (ExceptionCheck(JNIENV_P) = JNI_TRUE);
               ExceptionDescribe(JNIENV_P);
               ExceptionClear(JNIENV_P);
               sleep(5);
               p_char = *NULL;
           endif;

           //  at this point, p_char is a pointer to a unicode string
           //  and len is the length of the string.  You can do whatever
           //  you need with this string, and then call the
           //  ReleaseStringChars() when you're done.
           //
           //  For the sake of example, I'll copy it to an RPG unicode
           //  variable, then copy that to an EBCDIC character string,
           //  and then display it.
           //

           if (len <= %len(unicode));
              memcpy(%addr(unicode): p_Char: len * %size(jchar));
              output = %char(unicode);
              dsply output;
           endif;

           ReleaseStringChars(JNIENV_P: teststr: char);

           *inlr = *on;
      /end-free


      *++++++++++++++++++++++++++++++++++++++++++++++++++++++
      *  GetJniEnv(): Get pointer to JNI environment
      *
      *  Returns *NULL upon failure,
      *          or pointer to environment
      *++++++++++++++++++++++++++++++++++++++++++++++++++++++
     p GetJniEnv       B
     D GetJniEnv       PI              *

     D AttArg          ds                  likeds(JavaVMAttachArgs)
     D JVM             s                   like(JavaVM_p) dim(1)
     D JVMc            s                   like(jSize)
     D Env             s               *   inz(*null) static
     D RC              s             10I 0
      /free

        if (env <> *NULL);
           return env;
        endif;

        monitor;

            RC = JNI_GetCreatedJavaVMs(JVM: 1: JVMc);
            if (RC <> JNI_OK or JVMc = 0);
               return *NULL;
            endif;

            JavaVM_P = JVM(1);
            Attarg = *ALLx'00';
            Attarg.version = JNI_VERSION_1_2;

            RC = AttachCurrentThread(JVM(1): Env: %addr(AttArg));
            if (RC <> JNI_OK);
               env = *NULL;
            endif;
        on-error;
            env = *NULL;
        endmon;

        return ENV;
      /end-free
     P                 E

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.