1Java程序通過JNI調用本地C++_第一個示例_HelloWorld

javacode:TestNative.java
 
package com.cloud;
public class TestNative {
	public static void main(String[] args) {
		System.loadLibrary("NativeTestCodeDLL");
		new TestNative().sayHello();
	}
	/**
	 * 編寫java程序,方法必須用native修飾,並且方法不可以有實現體。
	 * 調用【native>本地的】c/c++程序
	 */
	public native void sayHello();
}


生成c++頭文件爲:com_cloud_TestNative.h

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cloud_TestNative */

#ifndef _Included_com_cloud_TestNative
#define _Included_com_cloud_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_cloud_TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_cloud_TestNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


 

 

 

 

 

 

編寫Java程序通過jni調用c、c++程序

1 編寫java程序,編寫一個 聲明調用c++的實現方法,方法必須用native修飾,並且方法不可以有實現體。
2 用jdk自帶的javah命令,運行cmd命令行切換到class文件的目錄下,或者指定classpath
3 在cmd命令行輸入【javah java文件全類名】生成class文件所對應的c++頭文件【.h文件】 。class目錄下生成了.h的文件代表生成頭文件成功。
4 用c++的ide VS2010 創建c++項目》Win32》Win32控制檯應用程序》,輸入項目名稱,下一步》選擇DLL>選擇 空的工程。然後生成項目。
5 把剛纔javah命令生成的頭文件【.h】文件複製到c++工程下面,然後在VS裏選中:頭文件》鼠標右鍵》添加》現有項,選擇複製過來的頭文件【.h】。
6 選中:源文件》添加》新建項》c++文件(.cpp)。輸入文件名,創建文件。
7 打開復制進來的頭文件,複製方法到創建的.cpp文件裏。
8 編寫c++代碼
示例如下:
#include"com_cloud_TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_com_cloud_TestNative_sayHello(JNIEnv * env, jobject obj)
{
 cout<<"Hello Word"<<endl;
}

9 編譯。會發生錯誤。
第一個提示缺少jni.h文件,將jdk\include下面的jni.h文件拷貝到c++工程下,並且把<>括號修改爲雙引號,示例:#include "jni.h"
第二個提示缺少#include "jni_md.h",在jdk\include\win32裏找到jni_md.h,複製到c++工程下。
編譯通過。生成了c++項目的DLL文件。ok。
10 把dll動態鏈接庫路徑設置到環境變量Path中。
11 編寫Java程序調用DLL動態連接庫。java中用System.loadLibrary("TeatNative");DLL的文件名,不包含擴展名。加載TestNative.dll文件。
如果出錯,需要eclipse重啓,讓eclipse啓動的時候會重新加載環境變量
12 執行調用,輸出HelloWorld,成功!!!。

 

 

 

發佈了84 篇原創文章 · 獲贊 9 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章