win 7 64位系统,java jna调用dll,传入参数不正确

win 7 64位系统,java jna调用dll,传入参数不正确,第1张

jdk+jre=完整java。出现问题的原因:1、jdk、jre安装不对,环境变量配置不对应。检查方法:在cmd下输入java-version命令查看是否有版本信息出现。解决方法:根据安装教程重新安装。(注意配置环境变量后需要重启电脑才生效!我就是因为没有重启。。。)2、我的64位电脑在配置java时也出现过这种情况,只有javac命令不出现对应信息,各种配置也正确。最后我的解决法是在360软件中心下载jre安装。

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>

/* 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工程路径下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7723291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存