native methode
-
hallo
ich bekomme folgende fehlermeldungprint.cpp(7) : error C2819: Der Typ 'JNIEnv' hat keinen ueberladenen Elementoperator '->'
d:\programme\jbuilder8\jdk1.4\include\jni.h(750) : Siehe Deklaration von 'JNIEnv_'
c:\print.cpp(7) : error C2227: Der linke Teil von '->GetStringUTFChars' muss auf Klasse/Struktur/Union zeigen
Fehler beim Ausführen von cl.exe.ich versuche von java aus folgende native methode aufzurufen.
#include<stdio.h> #include"Print.h" JNIEXPORT void JNICALL Java_aufgabe2_Print_printString (JNIEnv *env, jclass, jstring s){ jboolean isCopy; const char *str = (*env)-> GetStringUTFChars(env,s,&isCopy); printf("%s\n",str); }
danke für die hilfe
-
hab noch den einen teil aus dem jni.h hierher kopiert
/* * We use inlined functions for C++ so that programmers can write: * * env->FindClass("java/lang/String") * * in C++ rather than: * * (*env)->FindClass(env, "java/lang/String") * * in C. */ struct JNIEnv_ { const struct JNINativeInterface_ *functions; #ifdef __cplusplus jint GetVersion() { return functions->GetVersion(this); } jclass DefineClass(const char *name, jobject loader, const jbyte *buf, jsize len) { return functions->DefineClass(this, name, loader, buf, len); } jclass FindClass(const char *name) { return functions->FindClass(this, name); } . . . const char* GetStringUTFChars(jstring str, jboolean *isCopy) { return functions->GetStringUTFChars(this,str,isCopy); } . . .
-
hallo es klappt.
so gehtsenv->FindClass("java/lang/String")
und so nicht
(*env)->FindClass(env, "java/lang/String")
-
env->FindClass("java/lang/String")
und so nicht
(*env)->FindClass(env, "java/lang/String")
Das ist auch klar.
Das Äquivalent zuenv->FindClass("java/lang/String")
ist:
(*env).FindClass("java/lang/String")
nicht:
(*env)->FindClass(env, "java/lang/String")