0
このコードはhttp://java.sun.com/docs/books/jni/html/objtypes.html#4013JNIでC++を呼び出すJava:なぜJNIEnvポインタが2回間参照解除されるのですか?
JNIEXPORT jstring JNICALL
Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt)
{
char buf[128];
const jbyte *str;
str = (*env)->GetStringUTFChars(env, prompt, NULL);
if (str == NULL) {
return NULL; /* OutOfMemoryError already thrown */
}
printf("%s", str);
(*env)->ReleaseStringUTFChars(env, prompt, str);
/* We assume here that the user does not type more than
* 127 characters */
scanf("%s", buf);
return (*env)->NewStringUTF(env, buf);
}
から直接コピーされるのはなぜそれでもない
env->GetStringUTFChars(...
も
(*env).GetStringUTFChars(...
?
'JNIEnv'は、javaの悪名高い' jni.h'ヘッダファイルで定義されているポインタではなく、構造体です。この関数はプログラマが 'env-> GetStringUTFChars(...')を書くことを可能にするためにインライン化されています。 – Robino