0.1 JNA是什么
JNA(JavaNativeAccess)框架是一个开源的Java框架,是SUN公司主导开发的,建立在
经典的JNI的基础之上的一个框架。
JNA项目地址:https://jna.dev.java.net/
JNA使Java调用原生函数就像.NET上的P/Invoke一样方便、快捷。
JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同。JNA没有使用Annotation,
而是通过编写一般的Java代码来实现。
P/Invoke是.NET平台的机制。而JNA是Java平台上的一个开源类库,和其他类库没有
什么区别。只需要在classpath下加入jna.jar包,就可以使用JNA。
JNA使Java平台可以方便地调用原生函数,这大大扩展了Java平台的整合能力。
0.2 加入
在eclipse 中将文章最后的JNA下载中的zip解压放到一个记得住的文件夹然后在工程的JAVA Build Path中加入这两个jar即可
1 使用步骤
1.1 编写DLL
这里我们使用 code::blocks编写dll
首先新建一个DLL工程
建立完毕后我们可以看到这样的结构
其中有一个h文件和一个cpp文件
依葫芦画瓢 改写这两个文件就可以了,我们写两个函数,一个加一个阶乘
main.h 改写成
[cpp] view plain copy
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
/* To use this exported function of dll, include this header
* in your project.
*/
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
int add(int a,int b)
int factorial(int n)
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__
main.cpp改写成
[cpp] view plain copy
#include "main.h"
int add(int a,int b){
return a + b
}
int factorial(int n){
int i
int r = 1
for(i=1i<n+1i++)
r = r*i
return r
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break
case DLL_PROCESS_DETACH:
// detach from process
break
case DLL_THREAD_ATTACH:
// attach to thread
break
case DLL_THREAD_DETACH:
// detach from thread
break
}
return TRUE// succesful
}
其中DLLMain是动态链接库的入口函数我们不用管它,点击编译按钮
这样就生成了DLL文件了,我们在项目文件夹 bin文件夹下的Debug中可以找到编译成了DLL文件,将这个文件拷贝到需要使用DLL的JAVA工程路径下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)