[例解VC6.0实现JNI.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[例解VC6.0实现JNI

例解 VC++ 6.0 实现 JNI 作者:陈健明 作者简介 陈健明,华中师范大学网络与通讯研究所,您可以通过chenjm2000@和作者取得联系。 内容摘要 JNI是JDK的一部分,用于为Java提供一个本地代码的接口。通过使用JNI编写的程序能够确保你的代码能够完全的移植到所有的平台。JNI使得运行在JVM虚拟机上的Java代码能够操作使用其它语言编写的应用程序和库,比如C/C++以及汇编语言等。此外JNI提供的某些API还允许你把JVM嵌入到本地应用程序中。下图表达了JNI所扮演的角色。 本文将通过一个实例来阐述使用VC++6.0来实现JNI的完整过程。使用JNI来整合本地代码和Java代码的步骤是确定的,没有再创作的余地,所以读者可以通过本文的步骤来逐步认识到,其实Java也是没有什么不可以的。 一、JNI的实现 任务描述:在Java中调用windows下的消息框函数,并且从Java中传递一个字符串作为MessageBox函数的显示文本参数,显示在消息框的中间。下面让我们一起进入这一奇妙的旅程。 Step 1:写一个Java类,在这个类中包含了需要调用的本地方法的描述。 //WinMsgBox.java package com.jni; public class WinMsgBox { static{ System.loadLibrary(WinMsgDll); // (1) } public native void showMsgBox(String str); // (2) } (1)中WinMsgDll是动态链接文件的文件名,不用加扩展名,因为在不同的平台下动态链接文件扩展名是不同的,由JVM自动识别,比如在Solaris下,会被转换为WinMsgDll.so;而Win32环境下会转换为WinMsgDll.dll。这个文件名必须和Step 4中生成的文件名一致。这个文件的存放位置也很重要,它只能被放在JVM属性值java.library.path中指定的文件夹中。这个属性值可以使用System.getProperty(java.library.path);来查看。一般情况下,至少放在这几个位置是确定可靠的,windows安装目录下的system32下面,JDK安装目录下的bin下面,以及调用主类文件的当前目录。 (2)中指明了你必须用本地代码实现的方法。 Step 2:提示符下使用命令javac -d . WinMsgBox.java编译Step 1编写的java文件。 此时会在当前目录下建立一个edu\netcom\jni目录结构,并且一个WinMsgBox.class文件存在其中。 Step 3:提示符下使用命令javah -jni com.jni.WinMsgBox,此时会在当前目录下产生一个edu_netcom_jni_WinMsgBox.h文件,注意这个文件名是由(包名+类名)组成,中间用(_)隔开。此文件内容如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include jni.h // (1) /* Header for class edu_netcom_jni_WinMsgBox */ #ifndef _Included_edu_netcom_jni_WinMsgBox #define _Included_edu_netcom_jni_WinMsgBox #ifdef __cplusplus extern C { #endif /* * Class: edu_netcom_jni_WinMsgBox * Method: showMsgBox * Signature: (Ljava/lang/String;)V // (2) */ JNIEXPORT void JNICALL Java_edu_netcom_jni_WinMsgBox_showMsgBox (JNIEnv *, jobject, jstring); // (3) #ifdef __cplusplus } #endif #endif (1)包含的jni.h存在于JDK安装目录下的include下面。 (2)(Ljava/lang/String;)V这是函数的标记符,当从本地方法端访问Java端的方法时,会用到这个标记符。JNI中为每种数据类型也定义了标记符,标记符的规则请查看JNI标准文档。 (3)在WinMsgBox.java中本地方法void showMsgBox(String str);的定义,被映射为

文档评论(0)

laideman + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档