java web调用c_Java调用C/C++程序

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

1,在eclipse中需要做的事:

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

8e0f1fbe85ef06b890313eb9e2228cd5.png

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

packagecom.lonsine.www.jni;public classTestdll {static{

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

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

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

public native static intget();public native static void set(inti);public static voidmain(String[] args){

Testdll test=newTestdll();

test.set(10);

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

}

}

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

2f6e1bf5f8a65b4870ceba70b1f5c695.png

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

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

/*Header for class com_lonsine_www_jni_Testdll*/#ifndef _Included_com_lonsine_www_jni_Testdll#define _Included_com_lonsine_www_jni_Testdll#ifdef __cplusplusextern "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*/JNIEXPORTvoidJNICALL 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

/*Header for class com_lonsine_www_jni_Testdll*/#ifndef _Included_com_lonsine_www_jni_Testdll#define _Included_com_lonsine_www_jni_Testdll#ifdef __cplusplusextern "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*/JNIEXPORTvoidJNICALL 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");中显示的路径下。运行如下:

bfed3d8526204208d1fc2e59fe5f4b2c.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值