虽然java已经能够帮我们做了很多事情,几乎大部分的东西现在都可以用java来编写,但是有很多时候,用c++能够更好的实现系统的一些功能,因此,在java中调用c++编写的东西就显得十分的必要。这边文章将为你介绍用java调用vc++编写的工程的dll文件。
1.。编写java的类,这个类中System.loadLibrary()是加载动态链接库,SallyDLL是由c++产生的文件,等下将有介绍,
public native int add(int num1, int num2);是一个声明的方法,该方法的实现是由c++完成的,在java中可以跟一般
的方法一样调用。
1. package testJNI.test;
2.
3. public class TestDLL
4. {
5. static
6. {
7. System.loadLibrary("SallyDLL");
8. }
9.
10. public native int add(int num1, int num2);
11. }
12.
13.
2..编译上面的类。我使用eclipse写的,自动编译,打开cmd,进入到java工程的bin下。
使用命令:javah -classpath . -jni testJNI.test.TestDLL
这时会生成.h文件:testJNI_test_TestDLL.h
.h文件内容如下:
) -
1. #include <jni.h>
2.
3. #ifndef _Included_testJNI_test_TestDLL
4. #define _Included_testJNI_test_TestDLL
5. #ifdef __cplusplus
6. extern "C" {
7. #endif
8. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
9. (JNIEnv *, jobject, jint, jint);
10.
11. #ifdef __cplusplus
12. }
13. #endif
14. #endif
15.
3..用vc++建立DLL工程,
注:将testJNI_test_TestDLL.h copy到工程下
将jdk/include下的jniport.h copy到工程下
将jdk/include下的jni.h copy到VC++安装目录下的include 如C:\Program Files\Microsoft Visual Studio 9.0\VC\include 下面
4..编写add方法的实现,新建testDll.cpp 代码如下:
1. #include "stdafx.h"
2. #include "testJNI_test_TestDLL.h"
3.
4. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
5. (JNIEnv * env, jobject obj, jint num1, jint num2)
6. {
7. return num1 + num2;
8. }
5..Build C++工程,得到DLL文件,将文件的名改为, SallyDLL.dll 以上面一致,并将dll文件放到jdk的bin中
6..测试,编写java测试代码 在java中调用c++
1. public class TestDLLMain
2. {
3.
4.
5. public static void main(String[] args)
6. {
7. // TODO Auto-generated method stub
8. TestDLL test = new TestDLL();
9. System.out.println(test.add(20, 30));
10. }
11.
12. }
13.
14.
可以看到输出为 50
通过上面的方法就实现了java调用c++编写的东西