张也弛的JNI实例.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 要更改此

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档