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
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