JNI : Java程序调用C方法
1、新建一個Java類名稱為:TestJavaCallC
2、在類中添加如下代碼:
?
package Test;
public class TestJavaCallC {
??? public native void sayHello();
??? public static void main(String[] args){
??????? System.loadLibrary("NativeCode1");
??????? TestJavaCallC tNative = new TestJavaCallC();
??????? tNative.sayHello();
??? }
}
?
3、windows環境下:
3.1、運行–>cmd–>進入TestJavaCallC 項目的src目錄下編譯該Java類,命令 javac .(具體路徑)/TestJavaCallC .java。在該TestJavaCallC .java目錄下會生成TestJavaCallC .class文件
3.2使用javah生成頭文件,命令 javah -jni Test.TestJavaCallC 。在src目錄下生成Test_TestJavaCallC.h文件。文件內容:
?
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test_TestJavaCallC */
#ifndef _Included_Test_TestJavaCallC
#define _Included_Test_TestJavaCallC
#ifdef __cplusplus
extern "C" {
#endif
/*
?* Class:???? Test_TestJavaCallC
?* Method:??? sayHello
?* Signature: ()V
?*/
JNIEXPORT void JNICALL Java_Test_TestJavaCallC_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
?
4、生成C/C++的DLL文件。
4.1、打開VS2013–>新建Visual C++? –>Win32項目–>點擊確認
4.2、點擊下一步–>選擇DLL(D)–>點擊完成
4.3、將上一步生成的Test_TestJavaCallC.h添加到生成的項目頭文件中。
4.4、在項目源文件中添加NativeCode1.cpp文件。
4.5、在NativeCode1.cpp文件中添加如下代碼(如果頭文件Test_TestJavaCallC.h無法加載,則需要手動配置:項目右鍵–>屬性–>C/C++ –>常規–>附加包含目錄,將投文件的路徑添加進去,如果有多個不同路徑,則添加多個):
?
?// NativeCode1.cpp : 定義 DLL 應用程序的導出函數。
//
#include "stdafx.h"
#include "Test_TestJavaCallC.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_Test_TestJavaCallC_sayHello(JNIEnv *, jobject)
{
??? cout << "hello word" << endl;
}
?
4.6、項目右鍵–>生成,在Debug目錄下生成一個NativeCode1.dll文件。將其拷貝到java環境變量Java_Home的Bin目錄下,如:C:\Program Files\Java\jdk1.7.0_79\bin中。
5、運行Java程序:
?
package Test;
public class TestJavaCallC {
??? public native void sayHello();
??? public static void main(String[] args){
??????? System.loadLibrary("NativeCode1");
??????? TestJavaCallC tNative = new TestJavaCallC();
??????? tNative.sayHello();
??? }
?
總結
以上是生活随笔為你收集整理的JNI : Java程序调用C方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @RestController/@Con
- 下一篇: Dubbo:Dubbo入门---搭建一个