- 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
- 2016-2017学年高中生物第二单元生态工程与生物安全第1章第2节我国的生态工程教案中图版选修3.doc
- 2022-2023学年小升初英语易错点专练06完形填空15篇(广州教科版专版含答案)2.docx
- 期中专项四年级英语下册(含答案)3.docx
- 期末卷(二)(含答案解析)-2022-2023学年高二历史期中期末复习备考必刷题(选择性必修一国家制度与社会治理).docx
- 第4课欧姆定律的应用第一讲欧姆定律实验探究(原卷版).docx
- Unit1限制性定语从句语法讲义人教版高一英语学生版213.docx
- 2023年宁波市初中毕业升学文化考试科学模拟卷(八).docx
- 5.3细胞呼吸的原理和应用课件高一上学期生物人教版必修12.pptx
- 高中政治更好发挥政府作用教学设计.docx
- 体悟民间故事中的幸福--五上《中国民间故事》导读课.docx
文档评论(0)