- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JNI
JNI
最近在公司里做了一个手机的项目,需要 JAVA 程序在发送短信的时候和第三方的短信
服务器连接。短信接口是用 C++写的。琢磨了三天,大致搞懂了 JNI 的主体部分。先将心得
整理,希望各位朋友少走弯路。
首先引用一篇文章,介绍一个简单的 JNI 的调用的过程。
JAVA 以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器
的各种内部联系变得很少,约束了它的功能。解决 JAVA 对本地操作的一种方法就是 JNI。
JAVA 通过 JNI 调用本地方法,而本地方法是以库文件的形式存放的(在 WINDOWS 平台上是
DLL 文件形式,在 UNIX 机器上是 SO 文件形式)。通过调用本地的库文件的内部方法,使 JAVA
可以实现和本地机器的紧密联系,调用系统级的各接口方法。
简单介绍及应用如下:
一、JAVA 中所需要做的工作
在 JAVA 程序中,首先需要在类中声明所调用的库名称,如下:
static {
System.loadLibrary(“goodluck”);
}
在这里,库的扩展名字可以不用写出来,究竟是 DLL 还是 SO,由系统自己判断。
还需对将要调用的方法做本地声明,关键字为 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(goodluck);
}
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++程序
调用来生成所需的库文件。
二、C/C++中所需要做的工作
对于已生成的.h 头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连
接成库文件即可。再把库文件拷贝到 JAVA 程序的路径下面,就可以用 JAVA 调用 C/C++所实
现的功能了。
接上例子。我们先看一下 testdll.h 文件的内容:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class testdll */
#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern C {
#endif
/*
* Class: testdll
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);
/*
* Class: testdll
* Method: set
* Signature: (I)V
*/
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 调用的。而
您可能关注的文档
- 紫外检测 - (蛋白)凝胶层析法.ppt
- 类题训练(选择题)10---有机基础.doc
- 红外在药物中应用.ppt
- 紫外吸收光谱分析法课件.ppt
- 003流程三:工资集体协议范本(一式四份).doc
- 033 搜索引擎的广告告位销售问题.pdf
- 10-4-C-台湾中龙钢铁股份有限公司新建钢厂....pdf
- 1可行性报告.pdf
- 2011年一建项目管理真题校对.pdf
- 2011货币化工资管理标准.doc
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
最近下载
- 2024浙江省执业药师继续教育答案-腰椎间盘突出症的中西医治疗新进展和康复策略.docx VIP
- 物联网技术在智慧教育中的应用.docx VIP
- 吃外卖的危害.pptx VIP
- 乡镇卫生院二类疫苗管理规定乡镇疫苗管理制度.docx
- 四川省广元市2023-2024学年八年级下学期期末数学试题(无答案).docx
- 专题复习:2022高考历史核心考点微专题—— 市镇经济和市民生活(课件).pptx
- GB 21148-2020:足部 防护 安全鞋.pdf
- (高清版)B/T 22638.11-2023 铝箔试验方法 第11部分:力学性能的测试.pdf VIP
- GE-9F燃机-Mark-Ⅵ控制界面-中文版.pdf
- 卫生健康局乡村医生规范培训工作总结.docx VIP
文档评论(0)