案例二:传递参数给C代码,并从其获取结果

  注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型。

  

  此案例所有生成的所有文件如下:

  (1)编写案例二的Java代码,如下:

  

  这里我们定义了一个native方法,此方法用于计算两数平均值。将两个Java int类型的值传递给C代码,使其计算并返回double值。然后输出到标准IO流

  注:这里加载动态链接库的方式,改为了loadLibrary,只需提供库名即可,但是接下来在运行的时候,需要指定java.library.path,使其指向库所在的目录。

  (2)编译java代码,并生成头文件

  

  javac 命令有 -h 选项,即编译并生成头文件,-h 对应的参数,是头文件生成的地址。这里"."表示,在当前目录下生成。

   生成的头文件如下所示:

  

  (3)编写源文件。

  

  这里C获取到参数,并输出到标准IO流,然后将计算结果返回给Java。

  (4)利用gcc生成动态链接库

  

  由于Java环境变量已配置,可直接引用。生成的动态链接库名为demo.so

  (5)设置java.library.path,并执行Java程序

  

  上例,通过java命令的-D选项设定运行时库路径,但是仍然提示"找不到"demo2动态库。

  经查阅,发现,在Linux系统中,共享库(也就是放入java.library.path路径下的动态库)必须符合这样的规范:

    Java代码:System.loadLibrary("XXXX");

    库文件名:libXXXX.so

  在Linux系统下共享库必须有lib作为前缀

   故修改demo2.so的文件名为libdemo2.so,并再次执行Java程序

  

  

  成功传参,并返回计算结果。

  

【详解】JNI (Java Native Interface) (二)的更多相关文章

  1. 【详解】JNI (Java Native Interface) (四)

    案例四:回调实例方法与静态方法 描述:此案例将通过Java调用的C语言代码回调Java方法. 要想调用实例对象的方法,需要进行以下步骤: 1. 通过对象实例,获取到对象类的引用  => GetO ...

  2. 【详解】JNI (Java Native Interface) (三)

    案例三:C代码访问Java对象的实例变量   获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的 ...

  3. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  4. Android Jni(Java Native Interface)笔记

    首先记录一个问题,关于如何用javah生成头文件. 为什么要生成头文件?在含有 static{ System.loadLibrary("hellojni"); } 这样代码的类下面 ...

  5. JNI(java Native Interface)

    参看: http://blog.csdn.net/xw13106209/article/details/6989415

  6. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  7. JNI(Java Native Interface)

    一.JNI(Java Native Interface)        1.什么是JNI:               JNI(Java Native Interface):java本地开发接口   ...

  8. 【详解】JNI(Java Native Interface)(一)

    前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...

  9. Java Native Interface 四--JNI中引用类型

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobjec ...

随机推荐

  1. 20155326 2006-2007-2 《Java程序设计》第4周学习总结

    20155326 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承共同行为 (1)继承基本上就是避免多个类间重复定义共同行为,关键词为extends. ( ...

  2. android Activity中设置setResult 没有触发onActivityResult

    昨天修改<manifest 文件中activity 的 模式为单例模式:android:launchMode="singleTask" ,发现我的onActivityResu ...

  3. Swift3 使用系统UIAlertView方法做吐司效果

    /** *显示弹出信息 */ class func showAlertMessage(_ str:String,showtime Num:Double){ let alert = UIAlertVie ...

  4. 关于Java-枚举的总结

    枚举 枚举的定义 枚举也是JDK5.0的新特性. JDK5.0加入了一个全新类型的“类”——枚举类型. 为此引入了一个新的关键字enum. 可以这样来定义一个枚举类型: public enum Col ...

  5. delphi控制 word的几种方法--转

    对几种方法的难易程度的判别 a.通过Delphi的控件TOleContainer 将Word嵌入 这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以 ...

  6. Android-WebView与本地HTML (Java调用--->HTML的方法)

    上一篇博客 Android-WebView与本地HTML (HTML调用-->Java的方法) 介绍了 JavaScript 调用--> Java中的方法,而此篇博客是介绍 Java 调用 ...

  7. 解决.net+steeltoe服务客户端被服务调用出现400BadRequst错误

    一直尝试用steeltoe的官方示例被调用,一直报400BadRequst错误,换用Java写了一个简单client服务,却能正常被调用. 百思不得其解,用了一晚上填坑,开始觉得是不是IP没绑定,服务 ...

  8. Sql Server Report 导出到EXCEL 指定行高

    在SQL SERVER REPORT 2005做报表的时候,发现在report中指定的行高没有用.google了一下,找到了解决方法. Make both CanGrow and CanShrink ...

  9. SSO集成方案[随笔]

    看这个方案之前,先说明下为什么要加入SSO,以防对大家产生不好的影响.我们产品使用传统winform+db服务+Db存储方式开发,一群老菜帮子开发,以传统的datatble做数据传递,很多年了未有变化 ...

  10. 获取用户真实ip

    public static string GetRealIP() { string result = System.Web.HttpContext.Current.Request.Headers[&q ...