You are not logged in.

  • Login

1

Saturday, February 21st 2009, 12:17pm

Java String in C char über JNI

Hallo,
ich bin neuling im Forum :wink: 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

Social bookmarks