java 中如何调用vc++的dll


     虽然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. public class TestDLL
  3. {
  4.     static
  5.     {
  6.         System.loadLibrary("SallyDLL");
  7.     }
  8.     
  9.     public native int add(int num1, int num2);
  10. }
2..编译上面的类。我使用eclipse写的,自动编译,打开cmd,进入到java工程的bin下。
使用命令:javah -classpath . -jni testJNI.test.TestDLL
这时会生成.h文件:testJNI_test_TestDLL.h
.h文件内容如下:
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include 
  3. /* Header for class testJNI_test_TestDLL */
  4. #ifndef _Included_testJNI_test_TestDLL
  5. #define _Included_testJNI_test_TestDLL
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10.  * Class:     testJNI_test_TestDLL
  11.  * Method:    testOutput
  12.  * Signature: (II)I
  13.  */
  14. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  15.   (JNIEnv *, jobject, jint, jint);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif
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. JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
  4.   (JNIEnv * env, jobject obj, jint num1, jint num2)
  5. {
  6.         return num1 + num2;
  7. }
5..Build C++工程,得到DLL文件,将文件的名改为,   SallyDLL.dll   以上面一致,并将dll文件放到jdk的bin中


6..测试,编写java测试代码  在java中调用c++
  1. public class TestDLLMain
  2. {
  3.     /**
  4.      * @param args
  5.      */
  6.     public static void main(String[] args)
  7.     {
  8.         // TODO Auto-generated method stub
  9.         TestDLL test = new TestDLL();
  10.         System.out.println(test.add(20, 30));
  11.     }
  12. }
可以看到输出为 50


通过上面的方法就实现了java调用c++编写的东西

你可能感兴趣的:(Java技术,java,vc++,dll,eclipse,include,测试)