jna native.loadlibrary win7 需要什么支持dll
答案:1 悬赏:0 手机版
解决时间 2021-02-04 04:33
- 提问者网友:嗝是迷路的屁
- 2021-02-03 13:47
jna native.loadlibrary win7 需要什么支持dll
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-02-03 14:24
0 JNA安装
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>
#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=1;i<n+1;i++)
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.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>
#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=1;i<n+1;i++)
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工程路径下
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯