java調用C++代碼


一、在要使用到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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM