当前位置: 技术问答>java相关
JNI 访问对象域, 搞了半天没成功!急!
来源: 互联网 发布时间:2015-08-19
本文导语: C++程序 JNIEXPORT jstring JNICALL Java_jniTest_sprint (JNIEnv * env, jobject jObj, jstring jStr, jint jI) { jclass cl = env->GetObjectClass(jObj); jfieldID jfd = env->GetFieldID( cl, "i", "I"); jint i = env->GetIntField(cl, jfd); env->SetIntField(c...
C++程序
JNIEXPORT jstring JNICALL Java_jniTest_sprint
(JNIEnv * env, jobject jObj, jstring jStr, jint jI)
{
jclass cl = env->GetObjectClass(jObj);
jfieldID jfd = env->GetFieldID( cl, "i", "I");
jint i = env->GetIntField(cl, jfd);
env->SetIntField(cl, jfd, jI);
return jStr;
}
JAVA类:
public class jniTest
{
int i ;
public native String sprint(String format, int x);
public jniTest(){
i = 5;
}
static
{
System.loadLibrary("jniTest");
}
}
测试程序:
public class Printf2 {
public static void main(String[] args)
{
jniTest t = new jniTest();
System.out.println(t.i);
t.sprint("abcdefg", 20);
System.out.println(t.i);
}
}
但成员变量i的值一直没变.怎么办啊? 我想通过C++本地函数改变java成员变量值.大家帮忙啊!
JNIEXPORT jstring JNICALL Java_jniTest_sprint
(JNIEnv * env, jobject jObj, jstring jStr, jint jI)
{
jclass cl = env->GetObjectClass(jObj);
jfieldID jfd = env->GetFieldID( cl, "i", "I");
jint i = env->GetIntField(cl, jfd);
env->SetIntField(cl, jfd, jI);
return jStr;
}
JAVA类:
public class jniTest
{
int i ;
public native String sprint(String format, int x);
public jniTest(){
i = 5;
}
static
{
System.loadLibrary("jniTest");
}
}
测试程序:
public class Printf2 {
public static void main(String[] args)
{
jniTest t = new jniTest();
System.out.println(t.i);
t.sprint("abcdefg", 20);
System.out.println(t.i);
}
}
但成员变量i的值一直没变.怎么办啊? 我想通过C++本地函数改变java成员变量值.大家帮忙啊!
|
jint i = env->GetIntField(cl, jfd);
env->SetIntField(cl, jfd, jI);
两句中的cl改为jobj.谢谢!
env->SetIntField(cl, jfd, jI);
两句中的cl改为jobj.谢谢!
|
在你c++程序里return jstr;语句错了,改成(*env)->NewStringUTF(env,jStr);