JNI(1)

1901 ワード


JAvaプログラムはあまり難しくありません.
public class HelloJNI {



	/**

	 *  

	 * @param args

	 */

	static{

		System.loadLibrary("JNItest");

	}

	public static void main(String[] args) {

		

		new HelloJNI().sayHello();

		//System.out.println(System.getProperty("java.library.path")); 

	}

	

	public native void sayHello();



}


主な問題は、ローカルコードCの実装および環境変数の構成にある.
1.ローカルコードCの実装:VC++6.0で「Win 32 Dynamic-Link Library」プロジェクトを新規作成し、次のjavahコマンド(このコマンドを使用する場合はjavaプロジェクトのclassディレクトリの下)で生成されたヘッダファイルをプロジェクトディレクトリに追加する.
javah com.zhanglei.jniDemo.HelloJNI

 
jniに加わるhおよびjni_md.hヘッダファイルは、jdkの対応するディレクトリの下にあります(または、VC++6.0のincludeディレクトリの下に置くと、次のようになります).
#include "stdafx.h"

#include "com_XXX_jniDemo_HelloJNI.h"



JNIEXPORT void JNICALL Java_com_zhanglei_jniDemo_HelloJNI_sayHello

  (JNIEnv *, jobject)

{

    printf("helloJNI");

    return;

}

そしてVC++6.0コンパイル生成したDllファイルをPATHパスの下に置きjavaエンジニアリングでSystem.out.println(System.getProperty(「java.library.path」)は、現在このファイルをどのディレクトリの下に置くことができるかを得ることができます.あるいは環境変数PATHをこのDLLファイルの経路に設定しますが、人柄の問題は、ずっと解決していません.最後に、Eclipseでjavaプロジェクトをコンパイルし、helloJNIの印刷に成功しました.