java项目导入dll_如何将.dll导入Android Java项目(使用Eclipse)

Java本机接口(JNI)是java的有趣接口之一,通过 使用Java本机接口(JNI),您可以与其他应用程序和库一起使用 。

JNI是Java的本地编程接口,它是JDK的一部分。使用JNI,您可以使用以其他语言(例如C,C

++)编写的其他应用程序和库进行操作。但是基本的问题出现了,我什么时候应该使用JNI?

您需要特定于平台的信息,并且标准Java类库可能不支持您的应用程序所需的依赖于平台的功能。

您有一些用其他语言编写的库应用程序,并且想在Java应用程序中使用它。

您希望Java与某种底层编程语言进行交互。

下面给出简单的例子;看到方法具有“本地”关键字:

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

这将创建firstJNI.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);

----------------------------------------------

不要编辑头文件

现在让我们看看如何使用VC ++生成DLL,单击: 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

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);

}

现在,我对如何在Java应用程序中使用以C ++ / C编写的.dll文件有疑问。

我正在使用Eclipse开发适用于android的应用程序,并且我有一些dll文件,但我没有它们的源代码……如何在我的项目中使用它们?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值