JNI的使用中GetIntField()参数怎么写?

Ruby00 2003-04-28 07:15:21
我编了一个程序,想在C一端取得Java的几个int变量并显示出来,我找了好几本书,只找到SetIntField()的使用方法,我想知道GetIntField()怎么用,如何传参,传过来以后,能不能赋给C的变量?能不能printf()显示出来?
...全文
1310 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
judica 2003-07-03
  • 打赏
  • 举报
回复
我在java这边设计了这个一个参数传递进去
class A
{
int nA;
String sA;
}
class B
{
A aB;
}
现在定义一个JNI方法:
private native void testObject(B);
在c语言端,使用下面的方法打开
jclass cls = env->GetObjectClass(obj);//obj是传入的参数,得到的是B类的实例
fieldID fid = env->GetFieldID(cls,“aB”,“aB”);//得到aB属性的fid
jobject aObject = env->GetObjectField(cls,fid);//得到A类对象
jclass aCls = env->GetObjectClass(aObject);//得到A类对象的实例
可是得到A对象实例的时候有问题,执行不下去了
我想在这里得到nA和sA的值,不知道是不是这样来获取,还是要用其他方法,请高手指教
fenghui 2003-06-05
  • 打赏
  • 举报
回复
Get<type>Field 例程
NativeType Get<type>Field(JNIEnv *env, jobject obj,
jfieldID fieldID);

该访问器例程系列返回对象的实例(非静态)域的值。要访问的域由通过调用 GetFieldID() 而得到的域 ID 指定。

下表说明了 Get<type>Field 例程名及结果类型。应将 Get<type>Field 中的 type 替换为域的 Java 类型(或使用表中的某个实际例程名),然后将 NativeType 替换为该例程对应的本地类型。


表 4-1 Get<type>Field 访问器例程系列
Get<type>Field 例程名 本地类型
GetObjectField() jobject
GetBooleanField() jboolean
GetByteField() jbyte
GetCharField() jchar
GetShortField() jshort
GetIntField() jint
GetLongField() jlong
GetFloatField() jfloat
GetDoubleField() jdouble


参数:
env:JNI 接口指针。

obj:Java 对象(不能为 NULL)。

fieldID:有效的域 ID。


返回值:
域的内容。

Ruby00 2003-05-05
  • 打赏
  • 举报
回复
我下载了《Thinking in Java》,感觉书挺不错的,又找到一本《Java 2编程详解》还有《Java 核心(第二卷)》,说的好象是不太够。
mr9 2003-04-29
  • 打赏
  • 举报
回复
你说的都可以,但讲起来很麻烦,但你看看thinking in java的附录A就应该明白了。如果还不行,附录A还推荐了一本书(中国人写的,自豪吧)。
记住,在软件的世界里,没有什么是不可能的。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧