JNI的一些使用

  1. 公司项目要引入C/C++的DLL。只为能看懂一些代码。研究了一下JNI。下面是我研究JNI的笔记。

  2. Java中简单调用C++例子

    1. 首先在Java类中声明一个Native的方法


    2. 使用Javah命令生成包含Native方法声明的C/C++头文件,一般在.class文件路径下(不带文件的包名)在cmd中使用


    3. 按照生产的C/C++头文件来写C/C++源文件


    4. C/C++源文件编译成动态链接库(.dll

    5. DLL文件加入PATH环境下

    6. Java中调用DLL文件


  3. JavaJavahJavap的使用

    1. Javah的使用

      使用Javah命令生成包含Native方法声明的C/C++头文件,一般在.class文件路径下(不带文件的包名)在cmd中使用


    2. Javap的使用

      CMD进去到Class的路径下面


      使用Javap命令


  4. Java的类型在C/C++的映射关系


4JNI获取Java的类。(JNIEnv类中提供了如下的几个简单的函数获取到jclass

    1. jclass FindClass(const char*claName)

      FindClass会在系统的环境变量下去寻找类,传入完成的包名+类名,

      注意:

             包与包之间是用/而不是用.

      例如:

             jclass clazz =env->FindClass(“com.lyh.jni.TestNative”);

    2. jclass GetObjectClass(jobjectobj)

    3. jclass GetSuperClass(jclassclazz)

  1. 获取/设置Java中的属性

    1. 获取Java中的属性值

      GetFileId(jclass clazzconst char* name,const char* sign);获取非静态属性

      GetStaticFileId(jclass clazzconst char* name,const char* sign);获取静态属性

      注意:

             GetMethodId也可以获取到构造函数

                            env->GetMethodId(date_Clazz,”<init>”,”()V”);

                            

    1. 设置Java中的属性值

      可以使用Set<Type>Filed,设值属性值。


      注意:怎么获取数组的属性

             使用GetObjectField

  1. 调用Java中的方法

    1. 调用Java中的方法




    2. 调用Java中,父类的方法(子类集成父类并且重写父类的方法)




    3. 调用Java中的构造函数

      GetMethodId也可以获取到构造函数

      env->GetMethodId(date_Clazz,”<init>”,”()V”);


  2. Java对象的创建

    1. 使用NewObject创建对象


    2. 使用AllocObject创建对象


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值