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) ...
随机推荐
- 解决scalac Error: bad option -make:transitive
关闭idea 打开项目所在位置并cd .idea 修改scala_compiler.xml文件 删除掉参数行包含-make:transitive 保存后退出编辑并重启idea打开项目
- HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等
转自: http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html 引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然 ...
- 剩余参数(rest arguments) Mixin
Mixin – Pug 中文文档 https://pug.bootcss.com/language/mixins.html 混入 Mixin 混入是一种允许您在 Pug 中重复使用一整个代码块的方法. ...
- PHP 神奇的sprintf函数
sprintf 1.定义 sprintf() 函数将字符串进行各种类型的格式化. 2.语法 sprintf(format,arg1,arg2,arg++) format:格式类型. arg1,arg2 ...
- MyBatis 映射文件详解
1. MyBatis 映射文件之<select>标签 <select>用来定义查询操作; "id": 唯一标识符,需要和接口中的方法名一致; paramet ...
- Android自定义属性:attr.xml 与 TypedArray
1.attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <de ...
- Linux学习笔记—文件与文件系统的压缩与打包(转载)
压缩文件的用途与技术 例如,计算机都是以byte单位来计量的,1byte占8bit.如果存储数字1,那么1byte就会空出7bit.采用一定的计算方式,压缩这些空间可以大大降低文件存储. Linux系 ...
- 关于shared pool的深入探讨(二)【转载】
关于shared pool的深入探讨(二) 作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.co ...
- C语言高级宏技巧
特殊符号#.## (1)# When you put a # before an argument in a preprocessor macro, the preprocessor turns t ...
- 第五课 Makefile文件的制作(补充)
序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...