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类型的参数)的更多相关文章

  1. JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式

    1. 2.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_TjniMethod02.h" JNIEXPORT void ...

  2. JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法

    1.关键在于: 使用的 method id 是 子类的 还是 父类的,而 父类methodID的获取 必须使用 父类的class对象. 2.VC6(CPP)的DLL代码: #include<st ...

  3. 关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法

    其实解决办法很简单,就是POST请求的时候,来自实体的参数,content-type:application/x-www-form-urlencoded情况下,是默认按照键值对来解析的,比如param ...

  4. C# 通过ServiceStack 操作Redis——String类型的使用及示例

    1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...

  5. 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式

    今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...

  6. Switch能否用String类型做参数?

    switch(expr): 其中,expr参数可以是一个枚举常量(由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其包装类Integer.由于byte.short和char ...

  7. JNI_Z_04_属性的操作(非String类型的属性)

    1.步骤 : (1).获取 jclass (2).获取 类属性字段的id(最后一个参数是 属性字段 的签名) (3).获取/设置 类属性字段的值 ZC: 貌似 JNI里面 操作 类属性字段,完全是 无 ...

  8. MyBatis String类型传递参数注意事项

    Mybatis查询sql传入一个字符串传参数,报There is no getter for property named 'ids' in 'class java.lang.String'. 后来改 ...

  9. 调用的方法里接收一个List<>类型的参数,里面是自定义的EC类, 我要通过反射构建这List对象

              public static object CreateGeneric(Type generic, Type innerType, params object[] args)     ...

随机推荐

  1. linux必学

    memcache zookeeper activemq

  2. WebBrowser 控件-说明

    WebBrowser.Document 为活动的文档返回自动化对象,引用 Microsoft HTML Object Library 可查看详细属性和方法 下面的解说假设窗体中有一个名称为 Web1 ...

  3. Converts Internet addresses to Internet numbers. ip2long long2ip

    http://php.net/manual/en/function.long2ip.phpPHP: ip2long - Manual http://php.net/manual/en/function ...

  4. linux7开机自启动东方通tongweb

    自启动服务: 可以通过把TongWeb设置为系统服务来实现. 具体实现: 以root用户进行操作,在/etc/init.d目录下编写TongWeb的服务脚本tongweb,用来控制TongWeb的启动 ...

  5. 服务器(Ubuntu)远程访问ipython notebook(服务器运行ipython notebook 本地浏览器访问)

    准备工作 首先要安装 ipython 推荐直接 Anaconda 搞起(装在服务器). Anaconda 帮你集成N多python相关环境(包),省得你再手动咔咔一顿安装 服务器启动ipython n ...

  6. is和==的区别以及编码、解码

    一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s1 = 2 print(id(s1)) # 15143680 ...

  7. mysql聚合函数操作

    1.mysql对中文进行排序 注:是用convert函数用gb2312编码转换 SELECT * FROM 表名 ORDER BY CONVERT(字段名 USING gb2312 ) ASC;

  8. POS杂项数据SAP记账程序

    *&---------------------------------------------------------------------* *& Report ZDQFI_904 ...

  9. [转]C#读写远程共享文件夹

    1.在服务器设置一个共享文件夹,在这里我的服务器ip地址是10.200.8.73,共享文件夹名字是share,访问权限,用户名是administrator,密码是11111111. 2.新建一个控制台 ...

  10. python s13 day04

    1.1 all() 和 any( )   all() any()   0,None,"", [], (),{} #布尔值为0的 列举,None ,空列表,空元祖,空. print( ...