一、在要使用到C++代碼的類文件中聲明一個native方法,例如:
1 public class TestNative{ 2 3 public native void test(); 4 5 6 }
二、javac編譯此java文件,然后使用javah TestNative命令生成一個頭文件
三、使用visual studio工具新建dll項目
然后將jdk目錄下的inlcude文件夾下的jni.h和jawt.h以及include/win32文件夾下的jin_md.h和jawt_md.h文件添加在上面的dll項目中,然后將我們之前生成的TestNative.h文件中的#include<jni.h>改為#inlcude"jni.h"因為引號是在本地查找頭文件,
而<>實在標准庫函數中查找。
1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include "jni.h" 3 /* Header for class TestNative */ 4 5 #ifndef _Included_TestNative 6 #define _Included_TestNative 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 /* 11 * Class: TestNative 12 * Method: test 13 * Signature: (LTestNative/JavaObject;)V 14 */ 15 JNIEXPORT void JNICALL Java_TestNative_test 16 (JNIEnv *, jobject); 17 18 #ifdef __cplusplus 19 } 20 #endif 21 #endif
然后我們在C++中實現這個函數即可,例如:
1 // Dll_native.cpp: 定義 DLL 應用程序的導出函數。 2 // 3 4 #include "stdafx.h" 5 #include "TestNative.h" 6 #include <iostream> 7 8 9 JNIEXPORT void JNICALL Java_TestNative_test(JNIEnv *, jobject) { 10 11 std::cout << "hello C++" << std::endl; 12 }
最后編譯項目生成一個dll文件;
四、最后將生成好的dll文件放到java項目中,使用代碼調用:
1 public class TestNative{ 2 3 public native void test(); 4 5 public static void main(String[] args){ 6 7 System.loadLibrary("Dll_native"); 8 9 TestNative tn = new TestNative(); 10 tn.test(); 11 } 12 13 14 }