雖然java已經能夠幫我們做了很多事情,幾乎大部分的東西現在都可以用java來編寫,但是有很多時候,用c++能夠更好的實現系統的一些功能,因此,在java中調用c++編寫的東西就顯得十分的必要。這邊文章將爲你介紹用java調用vc++編寫的工程的dll文件。
1.。編寫java的類,這個類中System.loadLibrary()是加載動態鏈接庫,SallyDLL是由c++產生的文件,等下將有介紹,
public native int add(int num1, int num2);是一個聲明的方法,該方法的實現是由c++完成的,在java中可以跟一般
的方法一樣調用。
- package testJNI.test;
- public class TestDLL
- {
- static
- {
- System.loadLibrary("SallyDLL");
- }
- public native int add(int num1, int num2);
- }
使用命令:javah -classpath . -jni testJNI.test.TestDLL
這時會生成.h文件:testJNI_test_TestDLL.h
.h文件內容如下:
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* Header for class testJNI_test_TestDLL */
- #ifndef _Included_testJNI_test_TestDLL
- #define _Included_testJNI_test_TestDLL
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: testJNI_test_TestDLL
- * Method: testOutput
- * Signature: (II)I
- */
- JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
- (JNIEnv *, jobject, jint, jint);
- #ifdef __cplusplus
- }
- #endif
- #endif
注:將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 代碼如下:
- #include "stdafx.h"
- #include "testJNI_test_TestDLL.h"
- JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL_add
- (JNIEnv * env, jobject obj, jint num1, jint num2)
- {
- return num1 + num2;
- }
6..測試,編寫java測試代碼 在java中調用c++
- public class TestDLLMain
- {
- /**
- * @param args
- */
- public static void main(String[] args)
- {
- // TODO Auto-generated method stub
- TestDLL test = new TestDLL();
- System.out.println(test.add(20, 30));
- }
- }
通過上面的方法就實現了java調用c++編寫的東西