ãã1ãå建java项ç®
ããå¨Eclipseä¸å建javaå·¥ç¨jnidemoï¼å¦å¾1æ示ï¼
ããå½ä¿åTestNative.javaæ件æ¶ï¼Eclipseä¼èªå¨å¨jnidemo项ç®çbinç®å½ä¸ç¼è¯çæTestNative.classæ件,å¦å¾2æ示ï¼
ãã2ãçæ.hæ件
ãã使ç¨å½ä»¤è¡æ¹å¼ï¼è¿å ¥Eclipseä¸å·¥ç¨ç®å½çbinç®å½ï¼ç¶åæ§è¡javah com.hik.wyx.TestNativeï¼ç¼è¯åºå¤´æ件ï¼å¦å¾3æ示ï¼
ããæ¤æ¶ä¼å¨binç®å½ä¸çæcom_hik_wyx_TestNative.hæ件ï¼å¦å¾4æ示ï¼
ãã3ãæ°å»ºVCå·¥ç¨
ããå¨vc6.0ç¯å¢ä¸å建ä¸ä¸ªnativeçDLLå·¥ç¨ï¼å¦å¾5ã6æ示ï¼
ããç¹å»âå®æâæé®ï¼ä¹åæ°å»ºä¸ä¸ªTestNative.cppæ件ï¼å¦å¾7æ示ï¼
ããTestNative.cppæ件å
容ï¼
ãã#include"com_hik_wyx_TestNative.h"
ããJNIEXPORTvoid JNICALL Java_com_hik_wyx_TestNative_sayHello(JNIEnv *env,jobject obj){
ããprintf("Hello World !\n");
ããreturn;
ãã}
ãã4ãæ·»å JNIæ件路å¾
ããå¨å·¥å ·âé项ä¸ï¼è®¾ç½®å¹³å°åç®å½ï¼å¨ç®å½ä¸æ·»å JDKçincludeä¸win32æ件夹ï¼æ¹ä¾¿ä»¥åçJNI使ç¨(è¿éçjni.hæ件ä½äºJavaå®è£ ç®å½ä¸çJDK1.6.023\includeï¼jni_md.hæ件ä½äºJDK1.6.0 23\include\win32ä¸ï¼å 为jni.hæ件å¼ç¨äºjni_md.hæ件ï¼æä»¥å¿ é¡»å°è¿ä¸¤ä¸ªæ件置äºä½ çVCå·¥ç¨ä¸ï¼æè ç´æ¥æ¾å°VCå®è£ ç®å½çincludeç®å½ä¸ï¼æ¹ä¾¿ä»¥å使ç¨)ãå¦å¾8æ示ï¼
ãã5ãçæDLL
ããç¼è¯TestNative.cppå¨VC项ç®å·¥ç¨ä¸çDebugç®å½ä¸çænative.dllæ件ï¼å¦å¾9æ示ï¼
ãã6ãJavaå·¥ç¨è®¾ç½®DLLè·¯å¾
ããå°native.dllæ件æ·è´å°Javaå·¥ç¨binç®å½ä¸ï¼å¦å¾10æ示ï¼
ãã7ãå¨eclipseç¯å¢åéä¸å¢å nativelibrary locationæ¯æ
ããç¹å»Java项ç®å³é®âBuild PathâConfigureBuild Pathï¼å¦å¾11æ示ï¼
ããå¦å¾12æ示ï¼å¢å native library locationæ¯æï¼ä¹å°±æ¯å°å ·ä½çDLLæ件å å ¥å°Java项ç®ä¸ã
ãã注ï¼æ¥éª¤7çå¦å¤ä¸ç§æ¹å¼ï¼å°±æ¯å¨æ¥éª¤6ä¸å°native.dllæ件æ·è´å°JDKå®è£
è·¯å¾çbinç®å½ä¸ã(èèJava项ç®çè¿ç§»ï¼å»ºè®®ä½¿ç¨å°DLLæ·è´å°Java项ç®å·¥ç¨è·¯å¾ä¸çæ¹å¼)
ãã8ãæµè¯DLLè°ç¨
ããå¨TestNative.javaæ件ä¸å å
¥æµè¯è¯å¥ï¼è¿è¡DLLè°ç¨ã
ããpublicstaticvoid main(String[] args) {
ããSystem.loadLibrary("native");
ããnew TestNative().sayHello();
ãã}
ããæµè¯ç»æï¼