- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Java程序调用C/C++语言函数在现今的软件开发领域中,Java以其跨平台的优势得到大量的应用,其代码可以一次编译多处执行。但这种特性给Java带来了一定的局限性,幸好Java提供了完备的C/C++语言接口,这样我们可以利用C语言的强大功能实现Java难以实现的功能,在一定程序上消除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 JNICAL
您可能关注的文档
- 公共性之困境及其再生产+2013718693048543.doc
- 内部审计现场管理的环节与控制201336783449296.doc
- 公关学教学经验总结材料.doc
- 内存网格关键技术20121235985759453.doc
- 凝血酶与肯特令治疗新生儿上消化道出血20例疗效观察.doc
- 农村“立体化校本教研”与教师专业发展201411314144732211.doc
- 农村职业教育办学模式201451409531832.doc
- 功夫在诗外——器乐演奏的艺术研究.doc
- 农村职业中学学生学习兴趣问卷调查表.doc
- 供水管道漏水类型分析20131132312152910.doc
- 金融人才面临的环境与金融专业人才的培养2014924495329906.doc
- 浅谈戏曲教育的创新与发展.doc
- 浅谈我国家电行业营销渠道关系管理.doc
- 金属材料及热处理基本知识1--毛小虎.ppt
- 金属材料与热处理工艺关系的探讨2014367105013271.doc
- 三个代表内容:保持共产党员先进性教育活动工作方案.doc
- 教师教学效能、应对效能与职业枯竭的结构模型研究20141029010653640.doc
- 浅谈项目教学在《液压与气动技术》课中的应用.doc
- 进城老人融入城市生活方式的困境与对策探析2014242104413416.doc
- 京津塘高速公路给我国公路建设带来了什么.doc
文档评论(0)