Java String in C char über JNI

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java String in C char über JNI

    Hallo,
    ich bin neuling im Forum :lol: und hoffe, dass meine Frage beantwortet wird.

    Ich versuche diese C-Methode von java aus aufzurufen:

    int
    startup(
    const char *addr,
    const char *listen_port,
    const char *strap_addr,
    const char *strap_port
    );

    //*********************************************************
    also in Java :
    static{
    System.loadLibrary("method_aufruf_testlib");
    }
    public native int j_startup(
    String addr,
    String listen_port,
    String bootstrap_addr,
    String bootstrap_port
    );
    public static void main(String[] args) {

    j_method_aufruf_test call_method = new j_method_aufruf_test();
    String j_string = "NULL";

    call_method.j_startup(j_string, j_string, j_string, j_string);


    //*********************************************************
    in C:

    JNIEXPORT jint JNICALL Java_joss_1method_1aufruf_1test_j_1startup
    (JNIEnv *env, jobject jobj, jstring j_addr,
    jstring j_listen_port,
    jstring j_bootstrap_addr,
    jstring j_bootstrap_port)
    {

    // konvertiere Java-String in C-String
    const char *addr = (*env)->GetStringUTFChars(env, j_addr, 0);
    const char *listen_port = (*env)->GetStringUTFChars(env, j_listen_port, 0);
    const char *bootstrap_addr = (*env)->GetStringUTFChars(env, j_bootstrap_addr, 0);
    const char *bootstrap_port = (*env)->GetStringUTFChars(env, j_bootstrap_port, 0);


    printf("addr s = %s\n",addr);
    printf("addr c = %c\n",addr);
    printf("*addr c = %c\n\n",*addr);

    printf("vor startup \n\n\n");

    int ruekgabe = startup( addr, listen_port, bootstrap_addr, bootstrap_port);

    printf("nach startup \n\n\n");

    return ruekgabe;
    }
    //*********************************************************

    Ausgabe:
    @linux-vltm:~/workspacej/malloctest/bin> java joss_method_aufruf_test



    addr s = NULL
    addr c = �
    *addr c = N

    vor oss_startup


    @linux-vltm:~/workspacej/malloctest/bin>
    //*********************************************************
    Ich glaube die Methode in c [int ruekgabe = startup( addr, listen_port, bootstrap_addr, bootstrap_port);]
    bekommt nicht das was in java übergeben wurde [in dem Fall NULL, es war String j_string = "NULL"; ]

    was mache ich falsch?

    Vielen Dank

    Gruß
    Mike