Собственный интерфейс Java (JNI)
Собственный интерфейс Java (JNI) является одним из интересных интерфейсов Java. с использованием JavaСобственный интерфейс (JNI), с которым вы можете работать с другими приложениями и библиотеками .
JNI - это собственный программный интерфейс для Java, являющийся частью JDK.Используя JNI, вы можете работать с другими приложениями и библиотеками, написанными на другом языке, например C, C ++.Но возникает основной вопрос, когда мне следует использовать JNI?
- Вам нужна некоторая информация, специфичная для платформы, и стандартная библиотека классов Java может не поддерживать зависящие от платформы функции, необходимые для вашего приложения.
- У вас есть библиотечное приложение, написанное на другом языке, и вы хотите использовать его в своем Java-приложении.
- Вы хотите, чтобы Java взаимодействовала с некоторымиязык программирования низкого уровня.
Ниже приведен простой пример;Обратите внимание, что методы имеют «родной» KeyWord:
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
DLL, которую мы собираемся использовать, - firstJNI.DLL. Эта DLL может быть сгенерирована с помощью VC ++ или borland.О чем мы поговорим позже.
//firstJNI.java
class firstJNI
{
public native void displayHelloWorld();
public native void displayOther();
private native String getLine(String prompt);
static {
System.loadLibrary("firstJNI");//This is firstJNI.DLL
/*if generated by borland
System.loadLibrary("firstjni");//This is firstjni.dll
*/
}
public static void main(String[] args)
{
firstJNI JN=new firstJNI();
JN.displayHelloWorld();
JN.displayOther();
String input = JN.getLine("Enter Some Thing ");
System.out.println("You Entered " + input);
}
}
Скомпилируйте приведенный выше код, используя (Что это значит?)
prompt>javac firstJNI.java
Затем создайте заголовочный файл, используя (Что это значит?)
prompt>javah javah -jni HelloWorld
Будет создан первый файл JNI.h.В заголовочном файле вы увидите
-------------------------------------
JNIEXPORT void JNICALL Java_firstJNI_displayHelloWorld
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: displayOther
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_firstJNI_displayOther
(JNIEnv *, jobject);
/*
* Class: firstJNI
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_firstJNI_getLine
(JNIEnv *, jobject, jstring);
----------------------------------------------
Не редактировать заголовочный файл
Теперь давайте посмотрим, как сгенерировать DLL с помощью VC ++. Нажмите: File-> New-> Win32Dynamic.-Link Library Дайте имя и выберите простой проект DLL. У вас будет файл firstJNI.CPP. Ниже приводится файл firstJNI.cpp
// MYVCDLL.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "D:\Kanad\Study\codeToad Articles\firstJNI.h"
#include "jni.h" //can copy or give full path
#include <math.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" __declspec(dllexport) int getMemorySize();
//And your function definition should look like this:
extern "C" __declspec(dllexport) int getMemorySize()
{ //do something
MEMORYSTATUS memoryStatus;
int MB=1024*1024 ;
double memSize;
memoryStatus.dwLength=sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
__int64 size= memoryStatus.dwTotalPhys;
memSize=(double)size/MB;
printf("\nTotal Memory %.0lf MB",ceil(memSize));
return 0;
}
JNIEXPORT void JNICALL
Java_firstJNI_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL\n");
}
JNIEXPORT void JNICALL
Java_firstJNI_displayOther(JNIEnv *env, jobject obj)
{
printf("Hello world! This is using VC++ DLL Other Function \n");
getMemorySize();
}
JNIEXPORT jstring JNICALL
Java_firstJNI_getLine(JNIEnv *env, jobject obj, jstring enter)
{
char buf[128];
const char *str = env->GetStringUTFChars(enter, 0);
printf("\n%s", str);
env->ReleaseStringUTFChars(enter, str);
scanf("%s", buf);
return env->NewStringUTF(buf);
}
Теперь у меня есть вопросы о том, как я могу использоватьФайл .dll, написанный на C ++ / C в моем приложении Java.Я разрабатываю приложение для Android с использованием Eclipse, и у меня есть несколько DLL-файлов, и у меня нет их источника ... Как я могу использовать их в своем проекте ???