Hallo,
ich bin neu hier im Forum und auch mit C und hoffe, dass meine Frage beantwortet wird.
und zwar ch 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?
PS: es funktioniert einwandfrei z.B wenn ich diese Variablen in C initialisiere (also nicht durch konvertieren von Java-String):
char *addr = NULL;
char *listen_port = NULL;
char *bootstrap_addr = NULL;
char *bootstrap_port = NULL;
Aber mein Ziel ist es , von java aus die Methode so aufrufen zu können:
call_method. j_startup(
String addr,
String listen_port,
String bootstrap_addr,
String bootstrap_port
);
Ich danke im Voraus
Gruß
Mike