この本でJNIの使い方を学んでいます。JavaとC++を通信するために使用しています。この本の 25 ページを見ると、C++ に「変換」された C コードが次のようになっていることがわかります。
#include <jni.h>
#include <iostream>
#include "Prompt.h"
using namespace std;
JNIEXPORT jstring JNICALL
Java_Prompt_getLine (JNIEnv *env, jobject obj, jstring prompt){
char buf[128];
const jbyte *str;
str = env->GetStringUTFChars(prompt, NULL);
if(str == NULL){
return NULL; /* OutOfMemoryError already thrown */
}
printf("%s", str);
env->ReleaseStringUTFChars(prompt, str);
/* We assume here that the user does not type more than
* 127 characters */
scanf("%s",buf);
return env->NewStringUTF(buf);
}
私の意見では、str の宣言は次のようにする必要があります。
const char* str;
本が間違っているのか、それとも説明があるのか を理解したいだけです. 後で似たようなことをするからです。str を char ポインターとして宣言すると、私のコードは機能しますが、何か間違っているかどうかを理解したいと思います。
ありがとうございます。何か間違ったことを投稿した場合は申し訳ありません。このコミュニティでの最初のメッセージです。
編集: jbyte* でコンパイルすると、コンパイラは次のエラーを返します:
openjdk-amd64/include" -I"/usr/lib/jvm/java-7-openjdk-amd64/include/linux" -shared -o libPrompt.so Prompt.cpp -fPIC
Prompt.cpp: In function '_jstring* Java_Prompt_getLine(JNIEnv*, jobject, jstring)':
Prompt.cpp:12:43: error: invalid conversion from 'const char*' to 'const jbyte* {aka const signed char*}' [-fpermissive]
Prompt.cpp:17:40: error: invalid conversion from 'const jbyte* {aka const signed char*}' to 'const char*' [-fpermissive]
In file included from Prompt.cpp:1:0:
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h:1619:10: error: initializing argument 2 of 'void JNIEnv_::ReleaseStringUTFChars(jstring, const char*)' [-fpermissive]