| 网站首页 | 范文 | 演讲致词 | 汇报体会 | 总结报告 | 公文方案 | 领导讲话 | 党建工会 | 论文 | 文档 | 书信 | 
您现在的位置: 范文大全网 >> 论文 >> 计算机论文 >> 正文 用户登录 新用户注册
好的一种Java程序调用C/C++语言函数的方法           
好的一种Java程序调用C/C++语言函数的方法
[摘要]本文介绍如何利用java提供的c语言接口在java中调用c函数,解决了在实际调用过程中可能碰到的技术问题,并通过实例给出了具体编程方法。
[关键词]java jnt c dll

在现今的软件开发领域中,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++的头文件。LocALhOSt
例如程序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

[1] [2] 下一页

  • 上一个论文:

  • 下一个论文:


  • 看了《好的一种Java程序调用C/C++语言函数的方法》的网友还看了:
    [法律论文]试论解读现阶段工伤保险制度的一般程序
    [法律论文]试析我国惠农政策与法治一体化建设的一般要求
    [企业管理]关于高校考试管理工作的一些探析
    [经济论文]探析企业经济如何更好的实现创新性统计
    [今日更新]中国历史上最早的一次“选美”
    [今日更新]四年级作文:我喜欢的一件衣服
    [今日更新]《圣经》中的一些谚语熟语
    [今日更新]陈可辛 网游是另一种电影艺术
    [今日更新]晕的原因、蟑螂的一家、老鼠与大象
    [今日更新]老师对成绩较好的学生评语

    计算机论文
    普通论文论计算机网络安全策略
    普通论文对计算机网络安全策略及安全技术
    普通论文嵌入式实时操作系统研究与分析
    普通论文网络安全漏洞的检测工具AccessDi
    普通论文入侵检测模式匹配算法的研究与改
    普通论文基于马赛克图形的人机识别系统的
    普通论文基于电子公文交换系统的结构与模
    普通论文外墙外保温墙体裂缝问题分析及预
    普通论文畜禽免疫失败的原因及应对措施
    普通论文浅谈计算机网络专业课程项目教学
    普通论文煤矿无人工作面中视频监控系统的
    普通论文论软件项目管理的现状分析和对策
    论文
    普通论文[免费范文]企业核心竞争力的培育和
    普通论文[免费范文]##县阳光工程项目实施方
    普通论文[今日更新]现在的孩子智商都很高4则
    普通论文[今日更新]新医改背景下乡村医生的
    普通论文[免费范文]在春节促销活动动员大会
    普通论文[免费范文]先进性教育阶段总结
    普通论文[今日更新]北京小麦“觉悟”高 不
    普通论文[经济论文]关于农村金融经营现状的
    范文大全
    普通范文[范文大全]2012年三月大学生有关于
    普通范文[个人简历]怎样写毕业自我鉴定
    普通范文[零八零五]四川汶川地震演讲稿
    普通范文[实习报告]暑期餐厅传菜员社会实践
    普通范文[范文大全]科学发展水利促进经济建
    普通范文[范文大全]2012年三月入党积极分子
    普通范文[检讨书]学生顶撞老师的检讨书
    普通范文[规章制度]市政府信息公开工作考核
    演讲致词
    普通演讲[主持词]在三提升活动动员会上的讲
    普通演讲[会议发言稿]在政协党组领导干部民主生
    普通演讲[爱国演讲]银行先进个人事迹演讲稿 青
    普通演讲[竞聘演讲稿]烟草公司客户经理竞聘演讲
    普通演讲[礼仪主持范文]2013企业年夜饭主持词范文
    普通演讲[庆典致辞]在新办公大楼开工典礼上的
    工作范文
    普通公文方案[企划方案]医院科学发展观活动实施方
    普通公文方案[公文写作]党内统计工作的问题探讨及
    普通公文方案[公文写作]xx局创文明机关活动工作计
    普通公文方案[公文写作]2007年治安保卫工作总结
    普通公文方案[企划方案]物体打击事故应急救援预案
    普通总结[工作总结]关于做好科级干部竞争上岗
    普通汇报体会[征文演讲]旅游工作者国庆60周年演讲
    普通党建工会[思想汇报]思想汇报范文3
    普通总结[述职报告]审计工商科述职报告范文
    普通公文方案[公文写作]旅游新商品开发大赛策划方
    普通汇报体会[心得体会]入党的积极分子参观革命圣
    普通公文方案[公文写作]以“三个代表”重要思想为