收藏 分享(赏)

在Java中使用VC++组件.doc

上传人:hwpkd79526 文档编号:6103020 上传时间:2019-03-27 格式:DOC 页数:3 大小:30.50KB
下载 相关 举报
在Java中使用VC++组件.doc_第1页
第1页 / 共3页
在Java中使用VC++组件.doc_第2页
第2页 / 共3页
在Java中使用VC++组件.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、介绍JNI 是我喜欢的 java 编程框架;它让你你自由的使用本地编写的代码。例如,如果你想要在你的 java 程序中使用 Windows API(不如说 dll),那么你就要用 JNI。 Java 最受欢迎的特性就是它的平台无关性。但是,有时候这一特性也会使你将 Java 程序与本地平台整合变得困难。例如,在我们的工程中,将消息添加到数据库之前,我们使用 MSM Q(Microsoft Messaging Que)的队列机制来维护消息(为了避免消息丢失)。Microsoft 提供了 MSM Q API,它是 Windows 的 API。但是我们的程序使用 Java 来处理消息的,并且 Jav

2、a 不能直接访问这样的 API(dll)。因此我们决定做一个中间 DLL,它能够作为 Java 和 VC之间的桥(我们用过的技术 Java Native Inteface 或 JNI)。在进一步介绍之前,你应该知道或熟悉的下面一些知识:1.本地方法:本地方法是一个用在.Java 文件中声明的方法,并且这个声明将在你的本地代码(对于Windows 来说是在 VC中)中定义。2. 静态块:Java 中的静态块是指在任何其他事情发生前就能够被执行的代码块。那么让我们开始吧。首先,用本地方法声明来写你的 Java 程序。下面代码来自源代码中的例子:public class JNITeststaticS

3、ystem.loadLibrary(“JNITest“); / Loading dll in memorynative void showMessage( String str); / Declaring native methodpublic JNITest()System.out.println( “In the constructor of the Java program“ );public static void main( String s )JNITest JNT = new JNITest();JNT.showMessage(“Passing string from Java“

4、);在上面的代码中我们声明了 showMessage 方法,它是本地的方法,然后调用它, w.r.t 类 JNITest 的对象。执行下面的步骤:1.编译代码生成.class 文件2.在 JDK 文件夹中找到 javah 命令3.在 Dos 命令行下执行 javah jni JNITest执行完上面的步骤将产生 JNITest .h 文件。这个.h 文件包含了在 Java 代码中声明的本地方法的 VC中的函数名。创建 JNI DLL我已经完成了一半了。现在,在 Visual Studio(和其他任何 win32 IDE)创建一个简单的 dll 工程然后添加上面的.h 文件到工程中。为了获得包含

5、的文件 jni.h,添加 JREINCLUDE 文件夹的路径到你的 includes 中。现在你会发现在.Java 文件中声明的方法的命名,稍微有些不同。在上面的例子中你会得到:JNIEXPORT void JNICALL Java_JNITest_showMessage(JNIEnv *, jobject, jstring);这里,第三个参数是你的从 Java 中输入的参数。你能转换它成本地的形式如下:const char *strS1 = env-GetStringUTFChars( s1, 0);这里,你能够在程序中使用 steS1 作为 C字符串。在 demo 程序中我使用了它,把它显

6、示在MessageBox 中。有许多 JNIEnv 的方法,通过这些方法我们可以将多种 Java 数据类型转换成 C数据类型。使用完字符串之后必须释放它,字符串不会自用释放。JNI 的行为被假设为 JVM 的外部行为,因此它不会抛任何类型的能够被 Java 代码捕捉的异常。如果在离开函数前,你忘记了释放字符串,那么这可能会导致你的 JVM 的 crash。你可以使用函数 ReleaseStringUTFChars 释放字符串:env-ReleaseStringUTFChars( s1, strS1);整个代码可能会是这样:JNIEXPORT void JNICALL Java_JNITest_

7、showMessage(JNIEnv * env, jobject job, jstring str )const char *strMsgPtr = env-GetStringUTFChars( str , 0);/Converting string to C+ character pointerMessageBox( 0, strMsgPtr,“Message box from VC+ “, 0 );/Using the stringenv-ReleaseStringUTFChars( str, strMsgPtr);/ Releasing the string ( character pointer )现在你可以自由的使用 Windows(或 VC)组件做任何事情了?现在你可以使用 Windows API 了。编译一个 dll 然后放在 Java 程序的文件夹中(这个文件夹包含你的 .class 文件)。现在运行你的 Java 程序。注意:如果你得到了 UnSatisfiedLinkError 错误,那么检查你的方法原型,它必须与你在.h 文件中提供的一样。使用 JNI 你可以在 Java 程序中使用许多 Windows 提供的工具。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报