Javaæ¯éè¿JNIè°ç¨å
¶ä»è¯è¨ï¼å
æ¬C++ï¼ç¼è¯çæ¬å°æ¹æ³çï¼èæ¬å°æ¹æ³æ¯ä»¥åºæ件çå½¢å¼åæ¾çï¼å¨WINDOWSå¹³å°ä¸æ¯DLLæ件形å¼ï¼å¨UNIXæºå¨ä¸æ¯SOæ件形å¼ï¼ã
å¦ä¸æ¯è¯¦ç»è®²è§£ï¼
1ãJAVAä¸æéè¦åçå·¥ä½
å¨JAVAç¨åºä¸ï¼é¦å
éè¦å¨ç±»ä¸å£°ææè°ç¨çåºå称ï¼å¦ä¸ï¼
static {
System.loadLibrary(âgoodluckâ);
}
å¨è¿éï¼åºçæ©å±ååå¯ä»¥ä¸ç¨ååºæ¥ï¼ç©¶ç«æ¯DLLè¿æ¯SOï¼ç±ç³»ç»èªå·±å¤æã
è¿éè¦å¯¹å°è¦è°ç¨çæ¹æ³åæ¬å°å£°æï¼å
³é®å为nativeã并ä¸åªéè¦å£°æï¼èä¸éè¦å
·ä½å®ç°ãå¦ä¸ï¼
public native static void set(int i);
public native static int get();
ç¶åç¼è¯è¯¥JAVAç¨åºæ件ï¼çæCLASSï¼åç¨JAVAHå½ä»¤ï¼JNIå°±ä¼çæC/C++ç头æ件ã
ä¾å¦ç¨åºTestDll.javaï¼å
容为ï¼
public class TestDll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args)
{
TestDll test = new TestDll();
test.set(10);
System.out.println(test.get());
}
}
ç¨javac TestDll.javaç¼è¯å®ï¼ä¼çæTestDll.classã
åç¨javah TestDllï¼åä¼å¨å½åç®å½ä¸çæTestDll.hæ件ï¼è¿ä¸ªæ件éè¦è¢«C/C++ç¨åºè°ç¨æ¥çææéçåºæ件ã
2ãC/C++ä¸æéè¦åçå·¥ä½
对äºå·²çæç.h头æ件ï¼C/C++æéè¦åçï¼å°±æ¯æå®çå个æ¹æ³å
·ä½çå®ç°ãç¶åç¼è¯è¿æ¥æåºæ件å³å¯ãåæåºæ件æ·è´å°JAVAç¨åºçè·¯å¾ä¸é¢ï¼å°±å¯ä»¥ç¨JAVAè°ç¨C/C++æå®ç°çåè½äºã
æ¥ä¸ä¾åãæ们å
çä¸ä¸TestDll.hæ件çå
容ï¼
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
å¨å
·ä½å®ç°çæ¶åï¼æ们åªå
³å¿ä¸¤ä¸ªå½æ°åå
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);
å
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
è¿éJNIEXPORTåJNICALLé½æ¯JNIçå
³é®åï¼è¡¨ç¤ºæ¤å½æ°æ¯è¦è¢«JNIè°ç¨çãèjintæ¯ä»¥JNI为ä¸ä»ä½¿JAVAçintç±»åä¸æ¬å°çintæ²éçä¸ç§ç±»åï¼æ们å¯ä»¥è§èä¸è§ï¼å°±å½åint使ç¨ãå½æ°çå称æ¯JAVA_åå ä¸javaç¨åºçpackageè·¯å¾åå å½æ°åç»æçãåæ°ä¸ï¼æ们ä¹åªéè¦å
³å¿å¨JAVAç¨åºä¸åå¨çåæ°ï¼è³äºJNIEnv*åjclassæ们ä¸è¬æ²¡æå¿
è¦å»ç¢°å®ã
ä¸é¢æ们ç¨TestDll.cppæ件å
·ä½å®ç°è¿ä¸¤ä¸ªå½æ°ï¼
#include "TestDll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
ç¼è¯è¿æ¥æåºæ件ï¼æ¬ä¾æ¯å¨WINDOWSä¸åçï¼çæçæ¯DLLæ件ã并ä¸å称è¦ä¸JAVAä¸éè¦è°ç¨çä¸è´ï¼è¿éå°±æ¯goodluck.dll
ægoodluck.dllæ·è´å°TestDll.classçç®å½ä¸ï¼java TestDllè¿è¡å®ï¼å°±å¯ä»¥è§å¯å°ç»æäºã
温馨提示:答案为网友推荐,仅供参考