Java调用C/C++程序

JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

1,在eclipse中需要做的事:

创建一个Java工程,如下图:
 
   

编写一个类Testdll.java,内容如下:

package com.lonsine.www.jni;

public class Testdll {

static {

  System.out.println( System.getProperty("java.library.path"));//当你不知道dll文件放哪里的时候,查看此路径

  System.loadLibrary("goodluck");//这是声明类库

}

//下面是需要调用的接口方法,具体实现放在C++程序中实现

public native static int get();

public native static void set(int  i);

public static void main(String[] args){

  Testdll test=new Testdll();

  test.set(10);

  System.out.println(test.get());

}

}

 

2,找到编译后生成的Testdll.class 文件的目录的上一目录,在本项目中是F:\eclipse\bendiban\jnidemo\bin这个目录,通过cmd进入到该目录,然后执行javah com.lonsine.www.jni.Testdll如下图所以

 

表示成功,生成com_lonsine_www_jni_Testdll.h头文件,文件内容如下:

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

#include <jni.h>

/* Header for class com_lonsine_www_jni_Testdll */

 

#ifndef _Included_com_lonsine_www_jni_Testdll

#define _Included_com_lonsine_www_jni_Testdll

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_lonsine_www_jni_Testdll

 * Method:    get

 * Signature: ()I

 */

JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get

  (JNIEnv *, jclass);

 

/*

 * Class:     com_lonsine_www_jni_Testdll

 * Method:    set

 * Signature: (I)V

 */

JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set

  (JNIEnv *, jclass, jint );

 

#ifdef __cplusplus

}

#endif

#endif

 

3,  安装时没有把jdk相关的jni头文件加入到VC++6.0的include文件夹中,

Include文件夹中的jni.h、win32下的jawt_md.h、jni_md.h加入到..\VC98\Include目录下,如果已经存在,则不必添加做这步。

4,  使用VC++6.0创建一个名为goodluck.dll的文件

1)      打开VC++6.0,选择File->New->Win32 Dynamic-Link Library  填写你的Location和Project name ,Project name在这里填goodluck,然后点击OK。

2)      将com_lonsine_www_jni_Testdll.h拷贝到goodluck工程文件夹中。

3)      添加源文件goodluck.cpp,内容如下:

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

#include <jni.h>

/* Header for class com_lonsine_www_jni_Testdll */

 

#ifndef _Included_com_lonsine_www_jni_Testdll

#define _Included_com_lonsine_www_jni_Testdll

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_lonsine_www_jni_Testdll

 * Method:    get

 * Signature: ()I

 */

JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get

  (JNIEnv *, jclass);

 

/*

 * Class:     com_lonsine_www_jni_Testdll

 * Method:    set

 * Signature: (I)V

 */

JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set

  (JNIEnv *, jclass, jint );

 

#ifdef __cplusplus

}

#endif

#endif

 

4)点击编译成动态库就完成了。

5,把在Debug文件夹中生成的goodluck.dll 文件拷贝到eclispse根目录下,即是System.getProperty("java.library.path");中显示的路径下。运行如下:

 

这是我自己做的整个过程!

posted @ 2013-06-04 19:19  lonsine  阅读(283)  评论(0编辑  收藏  举报