浅谈Java程序如何调用C/C++语言函数

来源 :科学导报·教育论坛 | 被引量 : 0次 | 上传用户:yuzao81927
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本文介绍如何利用Java提供的C语言接口在Java中调用C函数,解决了在实际调用过程中可能碰到的技术问题,并通过实例给出了具体编程方法。
  关键词:Java;JNT;C++;DLL
  在现今的软件开发领域中,Java以其跨平台的优势得到大量的应用,其代码可以一次编译多处执行。但这种特性给Java带来了一定的局限性,幸好Java提供了完备的C/C++语言接口,这样我们可以利用C语言的强大功能实现Java难以实现的功能,在一定程序上消除Java的局限性和低效率。
  JNI是Java Native Interface的英文缩写,中文翻译为本地调用,自从Java 1.1开始就成为了Java标准的一部分。
  C/C++是系统级的编程语言,可以用来开发任何和系统相关的程序和类库, 但是Java本身编写底层的应用比较难实现,使用JNI可以调用现有的本地库,极大地灵活了Java的开发。
  C/C++的效率是目前最好的语言,可以使用C/C++来实现一些实时性非常高的部分。 C/C++和Java本身都是非常流行的编程语言,一些大型软件中经常使用语言之间的混合编程。
  一、创建DLL文件
  使用某一种C/C++开发工具创建Dll文件,实现某一功能,供JAVA调用,例如本文在此使用Visual studio 2005创建一个名为testdll的动态库文件。
  二、使用JNI
  JNI是Java Native Interface的缩写,中文为JAVA本地调用。它允许Java代码和其他语言写的代码进行交互。
  1.JAVA类
  在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
  static {
  System.loadLibrary(“testdll”); //加载动态库,testdll为DLL文件名称
  }
  还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具体实现。如下:
  public native static void set(int i);
  public native static int get();
  然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
  例如程序testdll.java,内容为:
  public class testdll { static { System.loadLibrary(“testdll”); } public native static int get(); public native static void set(int i); public static void main(String[] args) { testdll test = new testdll(); test.set(10); System.out.println(test.get()); } }
  用javac testdll.java编译它,会生成testdll.class。
  再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
  2.C/C++
  创建C/C++项目需要增加的头文件有jni.h、jni_md.h这两个文件是JNI中必须的;还有就是增加testdll.h。
  对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。
  接上例子。我们先看一下testdll.h文件的内容:
  #include #ifndef _Included_testdll #define _Included_testdll #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass); JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint); #ifdef __cplusplus } #endif #endif
  在具体实现的时候,我们只关心两个函数原型 JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass);和 JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint);这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。
  下面我们用testdll.cpp文件具体实现这两个函数:#include "testdll.h" int i = 0; JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv * jclass) { return i; } JNIEXPORT void JNICALL Java_testdll_set (JNIEnv * jclass jint j) { i = j+5; }
  编译连接成库文件,这里就是testdll.dll。把testdll.dll拷貝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。
  三、总结
  使用JNI可以在JAVA中调用其它语言编写的代码,在一定程度上消除JAVA的局限性和低效率。
  参考文献:
  [1]高晶,王建华.JNI技术在嵌入式软件开发中的应用[J].哈尔滨师范大学自然科学学报,2007,(06) .
  [2]石贵萍.JNI技术在嵌入式软件开发中是应用[J].消费导刊,2008,(01) .
其他文献
摘 要:随着计算机多媒体技术的突飞猛进,多媒体凭借着自身的优势越来越被受到广泛关注和应用,已经在不知不觉中影响到了我们生活的很多方面,本文简要介绍了计算机多媒体技术及其相关概念,对计算机的主要应用做了概括性总结。  关键词:多媒体;信息处理;信息与计算科学  随着计算机技术的不断发展,多媒体计算机的应用也日益广泛,成为信息技术的重要发展方向之一。多媒体信息处理技术、通信技术、信息网络技术的融合与发
期刊
经济越发展,会计越重要。这句话就好像是黄金法则,深深地刻在每位会计从业人员的脑海中。会计的发展是和整个经济的发展是紧密相联的。在经济处于鼎盛时期,特别是秦始皇统一后的中国,唐宋、明清时代,会计的发展速度就快。而在南北朝时期、五代十国时期,整个会计的发展就趋于停滞阶段。不仅在发展速度上,而且在发展阶段上,也能体会到这一点。历史的长河在流经元明清之后,随着外国资本主义的入侵,中国的自然经济逐步开始解体
期刊
摘 要:我国生态文明建设处于初级阶段。当前,要以环境保护作为生态文明建设的主体,以生态文明示范区建设为抓手,重点发展绿色经济、完善体制机制,抓好节能减排,解决突出环境问题,恢复重要生态系统生机。在生态文明建设试点基础上,尽快建立和完善具有指导性、可操作性、可比性、动态性和创新性的生态文明建设指标体系。  关键词:生态文明;建设;指标体系  一、生态文明的内涵  生态文明,是指“以人与自然、人与社会
期刊
摘 要:针对有些现行的道路运输管理机构的管理体制制约着行业管理向前发展的情况,分析了目前道路运输管理机构体制上存在的问题,并对道路运输市场如何可持续发展提出了建议。  关键词:道路运输;可持续发展;思考  随着道路运输市场的不断发展和完善,运政管理职能得到了进一步增强,《中华人民共和国行政许可法》和《中华人民共和国道路运输条例》(以下简称)的颁布实施,更是标志着道路运输管理向法制化、规范化的进程迈
期刊
摘 要:随着信息技术的飞速发展,以计算机为中心的多媒体技术在教学领域的应用越来越广泛。本文就信息技术应用在中学语文教学中的利弊进行探讨,趋利避害,扬长避短,为语文教学服务。  关键词:语文教学;信息技术;主从关系;利弊  随着现代教育技术的不断发展,多媒体正被广大教师应用在教学的各个方面,它将文字、图像、动画、视频、音频等融于一体,改变了传统课堂单一的教学模式,丰富了课堂教学内容,极大地满足了学生
期刊
摘 要:现代教育技术的飞速发展,已经为社会广大学子提供了学习的便利,学生在信息技术的大环境下,合理应用现代化的教育设施,自主的学习,对此,至今,现代化的教育设施将会成为现今的“讲台”,成为教师与学生沟通的平台。在学习过程中,学生借助多媒体教学设施进行视听,操作思考以及创造的过程,在这一过程中,教师通过之前的备课、技术操作,在课堂上就仅负责指导性的工作任务。在多媒体教学设计过程中,是一项工程好大、复
期刊
摘 要:信息技术是一门理论和实践相结合的重要课程,提高学生的信息技术水平和信息技术操作能力是这门课程的主要目的,然而,初中信息技术课堂教学模式还存在很多缺陷,为了提高教学水平和质量,教师必须要采取有效地措施,敢于创新,设计出有利于培养学生的教学模式。因此,在课堂教学中,师生之间的有效互动是不可缺少的,只有这样,学生的激情和积极性才能提高,学生才会自主地去学习。下面主要探讨初中信息技术教学中提高师生
期刊
摘 要:现代信息技术的广泛应用,正在对初中数学教学、数学学习等产生深刻的影响。新课程标准提倡利用信息技术来呈现以往教学中难以呈现的教学内容,实现信息技术与数学的有机整合。  關键词:现代信息技术;新课程标准;数学教学  随着新课程的改革,全国中小学实施素质教育,提高课堂教学效率是数学改革的一个重要课题。随之信息技术也已走进课堂,成为教师授课的一种有效的教学手段。《新课程标准》中指出:“现代信息技术
期刊
兴趣是探索知识的原动力,可以大大激发学生的求知欲,是推动学生主动学习的兴奋剂。那么如何激发和培养学生学习英语的兴趣呢?我结合自己多年英语教学的实践经验,谈一些粗浅的看法,供此机会与同仁共同探讨,共同学习。  一、教师以自身渊博的学识、过硬的基本功赢得学生的好评,从而激发学生学英语的兴趣  俗话说:“打铁需要自身硬。”对于我们英语教师来说,一口流利、地道的英语,漂亮的板书,幽默风趣的语言,都会深深吸
期刊
摘 要:随着旅游业的快速发展,旅游目的地大肆修建酒店、开设旅行社,然当旅游景区遭遇淡季时,这些就会为此遭遇亏损,然而关于旅游景区淡季营销的研究性论文却是少之又少。为此,此文通过分析张家界旅游淡季营销的现状,找出相应的应对对策,这对于张家界旅游的发展无疑是迫在眉睫。  关键词:淡季营销;张家界;现状;对策  随着社会经济的发展,人们的物质生活水平逐渐提高。旅游开始成为现代社会的一个新兴消费活动,而张
期刊