当前位置: 首页 > news >正文

松江区建设交通委员会网站电脑培训网

松江区建设交通委员会网站,电脑培训网,c2c模式的典型网站,网站备案的具体流程图Java Nativie Interface(JNI,中文名称Java本地接口)标准时Java平台的一部分,它允许Java代码和其他语言写得代码进行交互。JNI是本地编程接口,它使得Java虚拟机(VM)内部运行的Java代码能够用其他编程语言(如C、C和汇编语言)编写的应用程序和库进行交互操作…

Java Nativie Interface(JNI,中文名称Java本地接口)标准时Java平台的一部分,它允许Java代码和其他语言写得代码进行交互。JNI是本地编程接口,它使得Java虚拟机(VM)内部运行的Java代码能够用其他编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。JNI的主要用途是为了对硬件进行访问以及追求高效率或可重用C/C++库。

    Android系统中采用了JNI的方式来调用C/C++方法,然而,在Android系统里进一步加强了Java JNI的使用,使JNI的调用更具有效率。因此,总的来说,Android系统里可以采用两种方式来使用JNI。第一种:Java原生JNI,使用dll等动态链接库 ;第二种,Android加强版JNI,通过动态加载*.so链接库来进行JNI调用。今天,我们分析第一种JNI使用方式,也称得上是JNI入门。

       由于Java与其他编程语言采用的语法不同,为了让Java与C/C++库函数能进行通信,约定的一个参数类型映射如下:

                Java类型              C/C++类型

                 void                       void

                 jboolean                boolean

                 jint                         int

                 jlong                      long

                 jdouble                  double

                 jfloat                      float

                 jbyte                      jbyte

                 jchar                     char

                 jshort                     shor

       上面的只是简单类型的一个映射,后面我们会完善其他参数类型的映射。

      

       开发环境介绍(Windows下):

            Eclipse:                   主要用来创建Java工程

            MicrosoftVC++6.0:  生成动态链接库供相应的Java文件加载

 

一、使用Eclipse创建Java工程

        本例中,我们简单的创建了一个Java工程HelloBabyJNI,工程绝对路径位于E:\MyCode\AndroidCode\HelloBabyJNI路径下, 主文件路径位于\src\lover\hellojni路径下(路径对后面的javah编译很重要)

         HelloBabyJNI.java文件如下:

 

package com.lover.hellojni;/*** 一个简单的Java JNI实例* */
public class HelloBabyJNI {/** 静态构造函数,动态加载HelloBabyJNI动态库,其dll文件名为:HelloBabyJNI.dll --->由MSVC6.0软件创建*/static {System.load("E:/HelloBabyJNI.dll");  // 可能需要 dll链接库的绝对存放路径
    }/** 在Java中注册需要调用的C/C++本地方法(native method),也就是需要C/C++来实现的方法*/public native int add(int a, int b);// main方法,加载动态库来调用C/C++本地方法public static void main(String[] args) {HelloBabyJNI helloBabyJNI = new HelloBabyJNI();// 调用注册的add方法来得到返回值int result = helloBabyJNI.add(2, 3);// 输出System.out.println("after invoke the native method,the result is "+ result);}
}

 

2,编译HelloBabyJNI.java文件,生成HelloBabyJNI.class文件,位于路径\src\lover\hellojni\HelloBabyJNI.class

   

       3,使用javah指令编译HelloBabyJNI.class文件,生成Java与C/C++之间进行通信的约定接口,它规定了Java中nativemethod在C/C++的具体接口。运行cmd后,进入于E:\MyCode\AndroidCode\HelloBabyJNI\src路径下,使用javah指令,指令集形式如下:

        javah  -classpath   E:\MyCode\AndroidCode\HelloBabyJNI\src -jni  com.lover.hellojni.HelloBabyJNI,具体指令用法可以参考javah –help,本文只是重应用上。

           如图所示:

               

      

       成功运行后,我们可以在src文件夹下找到com_lover_hellojni_HelloBabyJNI.h文件,这个文件就是我们需要找到的约定接口,它  的命名规范为 包名_Java文件名。为了可理解性,我们将其重命名为HelloBabyJNI.h文件,内容如下:               

 

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lover_hellojni_HelloBabyJNI */#ifndef _Included_com_lover_hellojni_HelloBabyJNI
#define _Included_com_lover_hellojni_HelloBabyJNI
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     com_lover_hellojni_HelloBabyJNI* Method:    add* Signature: (II)I*/
/** java native method通过javah指令生成的约定接口*  */
JNIEXPORT jint JNICALL Java_com_lover_hellojni_HelloBabyJNI_add(JNIEnv *, jobject, jint, jint);#ifdef __cplusplus
}
#endif
#endif

  PS:1, 由于-jni指令在javah中是默认选项,因此我们可以忽略掉它

            2,在Dos中, .代表当前路径,也就是E:\MyCode\AndroidCode\HelloBabyJNI\src,我们可以简单的使用 . 来指定当前路径

 

           于是,一个简约的javah指令如下所示:

 

          

 

  

 

  此外,我们还可以在工程menu的bin文件夹下来执行javah指令,只需要将上面的bin替换src则可。当然,最后生成的.h文件在bin文件夹下。

 

 

 

 

 

二、使用MS VC生成dll动态链接库:

1,创建DLL工程,如同所示:

                 

 

 

 

    2,下一步,选择A simple DLL project

 

                                

 

 

 

    3,接下来,生成了我们的HelloJNI工程,切换至File View视图

 

         首先,导入我们之前生成的HelloBabyJNI.h头文件(可能我的VC环境有问题,我在这儿新建了一个HelloBabyJNI.h文件,拷   贝了我们之前通过javah生成的.h的文件内容)

 

         第 二,在StdAx.h文件添加如下需要引用的头文件:

 

                     

 

  

 

         第三,在HelloBabyJNI.cpp中添加我们的native method的方法实现,并且加入相应的形参。

 


剩下的参照: http://blog.csdn.net/qinjuning/article/details/6696533#

 

 

 

http://www.lbrq.cn/news/2387251.html

相关文章:

  • 网站建设制作免费咨询推广平台 赚佣金
  • 十大免费ppt课件网站石家庄网站建设
  • 做视频网站视频存放问题seo网站内容优化
  • 大连网站建设设计公司哪家好宁国网络推广
  • 电商网站建设教案软文怎么写吸引人
  • 要做网站到哪里做免费b站推广入口2023
  • 做网站需要什么资质查关键词热度的网站
  • 产品介绍网站设计武汉百捷集团百度推广服务有限公司
  • 辽阳太子河网站建设西安网站建设公司排行榜
  • 用ci框架如何做动态网站网站代运营推广
  • 山东省中国建设银行网站家电企业网站推广方案
  • 免费的软件网站建设怎么建网站卖东西
  • 做阅读任务挣钱的网站百度排名查询
  • 做茶叶网站公司杭州seo按天计费
  • 丰镇网站建设广东网络seo推广公司
  • 免费高清logo在线成都seo技术经理
  • 天津网站建设电焊机推广平台哪儿有怎么做
  • 企业网站建设需要什么搜索引擎优化排名seo
  • 免费建网站软件下载南昌搜索引擎优化
  • 在百度上做网站怎么做百度排名规则
  • 烟台市建设工程质量检测网站怎么开网站
  • 专业网站建设哪个好短网址生成网站
  • 建设网站的工具佛山优化推广
  • 马蜂窝旅游网站怎么做百度资源搜索平台
  • 北京网站建设模板下载百度人工客服在哪里找
  • 做网站教材合肥网络优化公司有几家
  • 广州市建设工程交易服务中心网站关键词热度查询工具
  • 个人网站赚广告费网络稿件投稿平台
  • 佛山企业网站开发公司白杨seo
  • 青海公司网站建设哪家快网上企业推广
  • 【2025最新】 .NET FrameWork微软离线运行库合集,一键安装版
  • 3.3 参数传递方式
  • Python 之地址编码识别
  • 文献分享0719
  • 镁合金汽车零部件市场报告:行业现状、发展趋势与投资前景分析
  • Python爬虫实战:研究PyYAML库相关技术