- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
张也弛的JNI实例
JNI实例作者: 发布时间:200-05-27 10:40:43
今天作了一个JNI的实例,现将方法列出,以便以后的学习使用:
首先创建Java项目,项目名随意,包名、类名随意,本实例中用的为dllTest包和CallDll.java类.
其中CallDLL.java代码如下:
package org.ly;
public class CallDll {
?????? static {
????????????? System.loadLibrary(CallDll);// no suffix,like .dll or .so
?????? }
?????? public native int getSquare(int i);
?????? public static void main(String[] args) {
????????????? CallDll invoker = new CallDll();
????????????? int j = invoker.getSquare(4);
????????????? System.out.println(j);
?????? }
}
只是作为一个简单的例子,代码很简单,输入一个整型参数,返回这个数的平方值,然后打印。
执行在org的上一层目录中执行如下编译命令:
javac .CallDll.java
执行后,使用jdk的javah.exe工具,编译生成头文件:dllTest_CallDll.h)
javah org.ly.CallDll
注意,这里如果出现NoClassFoundException异常,请确认java的classpath设置。
其中的代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include jni.h
/* Header for class dllTest_CallDll */
#ifndef _Included_dllTest_CallDll
#define _Included_dllTest_CallDll
#ifdef __cplusplus
extern C {
#endif
/*
* Class: dllTest_CallDll
* Method: getSquare
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_dllTest_CallDll_getSquare
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
生成头文件后,开始在VC下的操作,创建一个C++工程,工程相关选项如下:工程结构如下:
Java_dllTest_CallDll_getSquare(JNIEnv *env, jobject obj, jint p))
将上述.h头文件dllTest_CallDll.h)拷贝到要生成DLL的C或者C++等工程的根目录中。
编写Sample.cpp 文件,将如下内容加入:
#include stdafx.h
#include _CallDll.h
#include jni.h
JNIEXPORT jint JNICALL Java_org_ly_CallDll_getSquare(JNIEnv *env, jobject obj, jint p)
{
int j = p*p;
return j;
}
其中特殊显示的部分与.h中定义的要一致,并且将参数名进行实现。
注意这个类需要添加的头文件包括stdafx.h和jni.hinclude目录下)和jni_md.h(这个在JAVA_HOME的include目录的win32目录下,这个一般都不注意)和dllTest_CallDll.h,当然,dllTest_CallDll.h是必须要包含的。
?
编译这个类(F7),生成名为Sample的dll文件,将其改名(也可不改,但是要保持和java类中加载的名字一致)拷贝到如Java工程的根目录下,在Eclipse中是这样,
重要的是应该将这个放在Java加载库时可以找到的地方,可以放在windows的system32目录下。
然后执行CallDll应用程序就OK了CallDll但是生成的dll文件为MyDll,所以要将程序中的load部分改下代码,建议用load方法,如下:
System.load(D:/Program Files/eclipse/workspace/JavaTest/MyDll.dll);
由此,最后的代码全文是:
/*
* 创建日期 2008-5-27
*
* TODO 要更改此
您可能关注的文档
- 厦门大学(正泰数据)资产综合管控研究所.doc
- 压缩空气制备系统操作规程.doc
- 制动时发动机突然熄火的故障排除.doc
- 危险品的存放方案节能措施doc.doc
- 历史考研模拟试题A.doc
- 初中艺体教研组工作计划1.doc
- 创石河子安全文明施工工地计划书.doc
- 创建绿色学校花园式学校总结.doc
- 创建省文明单位汇报材料.doc
- 博克比赛开幕仪式主持.doc
- DB32T3444 健康企业评估规范.pdf
- DBJ25-82-2000 甘肃省聚苯板外保温墙体设计与施工规程 甘肃省地方标准.pdf
- DB32T-核与辐射突发事件卫生应急处置技术规范 第3部分:现场流行病学调查及编制说明.pdf
- DB44T1430-2014 冷冻水产品流通冷链管理技术规范.pdf
- TCASME-监控系统安装与维护规范.pdf
- TCSAE-汽车远程升级(OTA)信息安全测试规范.pdf
- TJSSAE-智能网联汽车开放道路测试管理要求及编制说明.pdf
- TEERT-挥发性有机物污染治理设施工况自动监控技术规范.pdf
- TCASME-三跨连续节段梁悬浇施工技术规范.pdf
- DB36T-行政执法案卷评查规范编制说明.pdf
最近下载
- (完整版)初三化学方程式大全.pdf
- 卫健委临检中心 15项临床检验质量控制指标——解读与应用.pptx VIP
- GB/T 14165-2008_金属和合金 大气腐蚀试验 现场试验的一般要求.pdf
- NB∕T11502-2024光伏光热一体组件和空气源热泵联合热水系统通用技术条件.pdf
- 抖音粉丝群体数据分析报告.pptx
- 【国家标准】QBT 3826-1999 轻工产品金属镀层和化学处理层的耐腐蚀试验方法 中性盐雾试验(NSS)法.pdf
- 足部特效反射区疗法一览表 附足底穴位图.doc
- 按次收费合同5篇.docx VIP
- 棋类运动协会章程.docx
- 口腔科的2024年工作总结6篇.docx VIP
文档评论(0)