快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

保定澳门银河官网真人娱乐:用JNI调用C或C++动态联接库入门



因事情的缘故,有时机打仗了Java本地措施调用(JNI)。本文中记下了初试JNI的历程和一点点体会。

应用Java的JNI调用C/C++的动态联络库有个固定的步骤,下面将以一个最简单的HelloWorld例子法度榜样来阐明调用历程。这个HelloWorld的例子只是简单的显示HelloWorld消息。

第一步 编写Java类

首先,我们创建一个名为jnitest的Eclipse工程,并新建一个src源代码保定澳门银河官网真人娱乐目录。

这里我们编写两个Java类,一个命名为HelloWorld,一个命名为TestDLL。HelloWorld类包孕一个本地措施displayHelloWorld(),TestDLL用于测试这个本地措施。HelloWorld的源码清单如下:

List1. HelloWorld.java源码

public class HelloWorld {

public native void displayHelloWorld();①

static{

System.loadLibrary("HelloWorld");②

}

}

TestDLL源码如下:

List2. TestDLL.java源码

public class TestDLL {

public static void main(String[] args){

HelloWorld helloWorld = new HelloWorld();

helloWorld.displayHelloWorld();

}

}

阐明:①是java本地措施申明;②装入动态链接库,"HelloWorld"是要装入的动态链接库名称。

第二步 编译Java类

在Eclipse对象中编译Java类。编译后的class文件会自动放入工程目录下的bin目录中。

第三步 天生C/C++头文件

在windows中打开一个敕令窗口,进入jnitest工程所在目录下的bin目录如:D:\workspace\jnitest\bin。键入javah -classpath D:\workspace\jnitest\bin HelloWorld敕令天生头文件HelloWorld.h。内容如下:

List3. HelloWorld.h源码

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class HelloWorld */

#ifndef _Included_HelloWorld

#define _Included_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:HelloWorld

* Method:displayHelloWorld

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

留意,不要改动这个头保定澳门银河官网真人娱乐文件。

第四步 编写本地措施实现

用VC6创建HelloWorld Win32动态链接库工程。将上述天生的头文件HelloWorld.h拷贝到

D:\Program Files\Microsoft Visual Studio\MyProjects\HelloWorld目录下面。

将D:\j2sdk1.4.2\include目录下的jni.h和D:\j2sdk1.4.2\include\win32\jni_md.h两个头文件拷贝到VC安装目录下的D:\Program Files\Microsoft Visual Studio\VC98\Include目录下面。在VC IDE中新建HelloWorld.cpp文件,实现头文件中声明的措施并编译天生DLL。

List4. HelloWorld.cpp源码

#include "HelloWorld.h"

#include

/*

* Cla保定澳门银河官网真人娱乐ss:HelloWorld

* Method:displayHelloWorld

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld

(JNIEnv *, jobject)

{

printf("Hello World!\n");保定澳门银河官网真人娱乐

return;

}

第五部 运行测试法度榜样

先将天生的DLL拷贝到保定澳门银河官网真人娱乐jnitest工程的D:\workspace\jnitest\bin下面,然后设置DLL搜索路径(情况变量PATH)为D:\workspace\jnitest\bin(JNI并没有规定必须将dll放在与class文件相同的目录,只要确保JVM能搜索到DLL即可)③。从新启动Elipse后,运行测试法度榜样,将看到节制台输出“Hello World!”

留意,③必须设置好DLL搜索路径,或者将dll拷贝到C:\WINDOWS\system32下面。这里,我折腾了不少光阴,才搞定。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: