JNI_Z_05_方法的操作(没有String类型的参数)
1、步骤:
(1)、获取 jclass
(2)、获取 method的id
(3)、调用 method
ZC: 貌似 JNI里面 操作 类的方法,完全是 无视 访问权限的... 然而 static的方法,稍有不同,要注意。
ZC: CallIntMethod(...) / CallStaticIntMethod(...) 等 函数"Call<Type>Method(jobject obj, jmethodID id, ....);" 中的 <Type>(Int等),值得是 函数的返回值(并非函数的传入参数)。
2、VC6(CPP)的DLL代码:
#include<stdio.h>
#include "jniZ_TjniMethod.h" JNIEXPORT void JNICALL Java_jniZ_TjniMethod_NativeFunc(JNIEnv * env, jobject obj)
{
// 获取obj中对象的class对象
jclass clazz = env->GetObjectClass(obj); // 获取 method的id
jmethodID methodId01 = env->GetMethodID(clazz, "Func01", "(I)I"); // public
jmethodID methodId02 = env->GetMethodID(clazz, "Func02", "(D)I"); // protected
jmethodID methodId03 = env->GetMethodID(clazz, "Func03", "(I)I"); // private
jmethodID methodId04 = env->GetStaticMethodID(clazz, "Func04", "(I)I"); // (非public/protected/private)的static int i01 = env->CallIntMethod(obj, methodId01, );
int i02 = env->CallIntMethod(obj, methodId02, 2.0); // 注意这里,传入 "2.0"和"2" 是由区别的...
int i03 = env->CallIntMethod(obj, methodId03, );
int i04 = env->CallStaticIntMethod(clazz, methodId04, ); printf("i01 : %d\n", i01);
printf("i02 : %d\n", i02);
printf("i03 : %d\n", i03);
printf("i04 : %d\n", i04);
}
3、Java代码:
package jniZ; public class TjniMethod
{
public int Func01(int _i)
{
return (100 + _i);
} protected int Func02(double _i)
{
System.out.println("Func02 _i : "+_i);
double dRtn = 200 + _i;
System.out.println("Func02 dRtn : "+dRtn);
int iRtn = (int)dRtn;
System.out.println("Func02 iRtn : "+iRtn);
return iRtn;
} private int Func03(int _i)
{
return (300 + _i);
} static int Func04(int _i)
{
return (400 + _i);
} public native void NativeFunc(); public static void main(String[] args)
{
//*
System.loadLibrary("JniMethod_VC6");
TjniMethod jniZ = new TjniMethod();
jniZ.NativeFunc();
//*/
/*
double d = 2;
System.out.println("d : "+d);
int i = (int)(d + 100);
System.out.println("i : "+i);
//*/
}
}
4、Java控制台输出:
Func02 _i : 2.0
Func02 dRtn : 202.0
Func02 iRtn : 202
i01 : 101
i02 : 202
i03 : 301
i04 : 401
5、
JNI_Z_05_方法的操作(没有String类型的参数)的更多相关文章
- JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式
1. 2.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_TjniMethod02.h" JNIEXPORT void ...
- JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法
1.关键在于: 使用的 method id 是 子类的 还是 父类的,而 父类methodID的获取 必须使用 父类的class对象. 2.VC6(CPP)的DLL代码: #include<st ...
- 关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法
其实解决办法很简单,就是POST请求的时候,来自实体的参数,content-type:application/x-www-form-urlencoded情况下,是默认按照键值对来解析的,比如param ...
- C# 通过ServiceStack 操作Redis——String类型的使用及示例
1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...
- 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...
- Switch能否用String类型做参数?
switch(expr): 其中,expr参数可以是一个枚举常量(由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其包装类Integer.由于byte.short和char ...
- JNI_Z_04_属性的操作(非String类型的属性)
1.步骤 : (1).获取 jclass (2).获取 类属性字段的id(最后一个参数是 属性字段 的签名) (3).获取/设置 类属性字段的值 ZC: 貌似 JNI里面 操作 类属性字段,完全是 无 ...
- MyBatis String类型传递参数注意事项
Mybatis查询sql传入一个字符串传参数,报There is no getter for property named 'ids' in 'class java.lang.String'. 后来改 ...
- 调用的方法里接收一个List<>类型的参数,里面是自定义的EC类, 我要通过反射构建这List对象
public static object CreateGeneric(Type generic, Type innerType, params object[] args) ...
随机推荐
- java上传图片,把图片存到本地
思路:js通过FileReader获取图片的Base64,Java解码用IO存到本地. HTML 代码 <input type="file" ng-model="f ...
- jquery ajax 传数据到后台乱码的处理方法
前台页面先对中文进行编码,如下红色字体: function saveCommentTemplate() { $.ajax({ cache : false, type:'get', dataType:' ...
- 使用maven搭建SSM框架
使用maven搭建SSM框架,首先得准备好maven环境. 搭建maven环境 第一步:下载maven http://maven.apache.org/download.cgi 下载后解压就可以了. ...
- delphi xe-intarweb 功能记录
IWServerController.HistoryEnabled := True; //使浏览器后退.前进按钮有效TIWForm2.Create(WebApplication).Show; //建 ...
- 百度 url 当在baidu搜索结果展示页,去点击标头时
Spencer : 百度加一层跳转主要为了监控点击 w 基于dns和用户体验考虑的猜测 0-百度自己的cdn服务器存入各个域名/url的服务器ip(多ip情况下,返回物理空间相对用户最近的服务器ip) ...
- SQL中的函数 •Aggregate 函数 •Scalar 函数
合计函数 :Aggregate是针对一系列值的操作,返回一个单一的值 Scalar 函数是针对一个单一的值的操作,返回基于输入值的一个单一值 合计函数: AVG()返回某列的平均值:COUNT()返 ...
- Mindjet MindManager 出现Runtime Error解决方案
Mindjet MindManager文件打开报错怎么解决?文件打开后提示Runtime Error!Program:C:\Program Files\MindManager 9\Mindmanage ...
- Python的3个方法:静态方法(staticmethod),类方法(classmethod)和实例方法
Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Linux学习笔记之文件权限
前言: 说起文件权限,大家在windows下应该很熟悉就对文件右键属性,然后配置一点什么读写之类的权限,然后可以分配到每个的人. 对于linux 我先为大家介绍一个使用者和组和其他的概念说明一下 文件 ...
- 简明python教程三-----函数
函数通过def关键字定义.def关键字后跟一个函数的表标识符名称,然后跟一对圆括号. 圆括号之中可以包括一些变量名,该行以冒号结尾.接下来是一块语句,它们是函数体. def sayHello(): p ...