2023-01-21 232
我试图构建一种本机方法,尽管它似乎运行良好,但是我正在努力理解函数中的字段[*sig] –
jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
例如,我有一个小的Java代码,该代码使用一个称为” I”的实例变量,所有这些本机方法(命名test)都将其乘以2.
现在我指的是Java完整参考书 – 这里的代码像 –
我的问题是 – 这是什么”我” –
fid =(*env) – > getfieldid(env,cls,” i”,” i”);
当我阅读Oracle Documenttion时,它说 –
https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html
访问对象的字段
getfieldid
jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
返回类的实例(非静态)字段的字段ID.该字段由其名称和签名指定. GetField和SETFIELD家族的登录机功能使用字段ID来检索对象字段.
getFieldId()导致一个非初始化的类被初始化.
GetFieldId()不能用于获得数组的长度字段.代替使用getarraylength().
链接:
索引94在JNIENV接口函数表中.
参数:
env:JNI接口指针.
clazz:java类对象.
名称:0端的修改UTF-8字符串中的字段名称.
SIG:0端的修改UTF-8字符串中的字段签名.
您能详细说明这个字段” SIG”是什么?我无法将”我”与任何事物联系起来.
#include <jni.h>
#include "NativeDemo.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativeDemo_test(JNIEnv *env , jobject obj)
{
jclass cls;
jfieldID fid;
jint i;
printf("Starting the native method\n");
cls = (*env)->GetObjectClass(env,obj);
fid = (*env)->GetFieldId(env,cls,"i", "I");
请参阅下面的”员工”示例,core java,v.2ch. 12,由Horstmann and Cornell撰写 http://www.horstmann.com/corejava.html
” id”是字段的名称,这里
私人双工资;
在员工课内;还必须指定其签名(” SIG”)或类型” D”(Double).在您的代码中,”我”是整数.
请参阅 http://http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
一旦获得JFieldID,它可以用于修改
字段.
/**
@version 1.10 1999-11-13
@author Cay Horstmann
*/
#include "Employee.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_Employee_raiseSalary(JNIEnv* env, jobject this_obj, jdouble byPercent)
{
/* get the class */
jclass class_Employee = (*env)->GetObjectClass(env, this_obj);
/* get the field ID */
jfieldID id_salary = (*env)->GetFieldID(env, class_Employee, "salary", "D");
/* get the field value */
jdouble salary = (*env)->GetDoubleField(env, this_obj, id_salary);
salary *= 1 + byPercent / 100;
/* set the field value */
(*env)->SetDoubleField(env, this_obj, id_salary, salary);
}
” i”这是原始整数类型的签名. Oracle提供了一个类型签名表: htttp ://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp276
对于非主要类型,签名是形式
的
阵列,[添加.
对于方法,()用于将参数与返回值分开.
以上所述是小编给大家介绍的关于GetFieldID的澄清,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26225.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态