文档章节

JNA调用DLL函数遇到的几个问题

雷霄骅
 雷霄骅
发布于 2013/09/30 16:49
字数 410
阅读 126
收藏 1
点赞 0
评论 0

最近一个JSP项目需要用到分词模块,而分词模块实用C++写成的DLL库。于是上网搜各种方法,最后选择了JNA作为JSP调用DLL的工具。

JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。

JNA的使用方法有很多,这里只总结下我遇到的问题:

DLL放置的路径问题

JSP本身分为bean的src目录和WebRoot的脚本目录,而我们的DLL需要在src下的类中调用,于是遇到了将DLL和资源文件放置到什么地方的问题。

最后解决方法:将调用的DLL和LIB文件拷贝到C:/Windows/System32目录下可以访问。

解决过程:我试过将这些文件放到Src目录下,然后用Class.class.getResource("/").getPath()这种方法得到类的class路径,再得到资源文件的路径,结果没有成功。

DLL调用资源的路径问题

DLL可能会调用其他资源文件,比如我这里需要用到词典,路径也是个问题,不过这个较为简单,很容易解决:

将资源文件目录,拷贝到Src目录下面。在程序中使用Class.class.getResource("/").getPath()获得编译后的类所在的根目录,再连接上资源文件即可。

本文转载自:http://www.crazyant.net/2012/12/26/jsp使用jna调用dll函数遇到的几个问题/

共有 人打赏支持
雷霄骅
粉丝 193
博文 419
码字总数 2129
作品 4
朝阳
程序员
JNA, Java Native开发利器

下面的文章由转载而来,java与c++的调用基本思路是这样子,但是结合我的使用经验,在使用jna和jnative的时候需要考虑到jdk的版本,jnative跟jdk1.4的结合可能会有点问题,因为我之前选的是j...

彭苏云
2013/04/16
0
4
java jna 调用dll 一些问题 谢谢

最近在开发关联硬件的java程序, 遇到问题: java jna调用dll方法 但是dll方法里面传的不是基本数据类型,是类似封装对象的那种 jna可以实现调用dll方法传基本数据类型,但是不知道怎么传封装...

简简单单977
2017/09/12
31
1
JNA工作笔记一

JNA是什么? JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口...

吕兵阳
2015/12/18
685
0
用proguard混淆后 jna调用dll报错 java.lang.UnsatisfiedLinkError: Error looking up function 'b': ???????¨?

遇到一个麻烦 用proguard混淆后 jna调用dll报错,没混淆之前是正常的,所有jar包都是添加好了的 报的是 Error looking up function 'b'google了很久没找到答案 多数说dll没有这个方法,但是肯...

本人纯属虚构
2013/09/28
3.5K
4
JNA调用DLL,JNative函数回调

我手头上现在有一个DLL,在DLL 中有一个函数:GoSdkVersion@0 ,JNA中使用什么协议可以调用 stdcall会使导出函数名字前面加一个下划线,后面加一个@再加上参数的字节数, 比如MyFunction@4的参...

zj507071
2016/05/20
670
1
java通过jna调用科大讯飞语音云实现语音识别功能

说明:写本文时还没有提供java平台的,现在官方有java平台的sdk了,可以直接使用。本文已经没有太多实际意义了。 语音识别技术 语音识别就是让机器通过识别和理解过程把语音信号转变为相应的...

长平狐
2013/11/25
956
0
谁做过applet中调用dll的数字签名请指点下或发demo,网上说的很笼统测试不通过

正在写applet调用dll获取本地硬件的数据,CS版本的已经实现了调用dll使用的是JNA,现在要做到jsp中只能用applet了,但是这个签名折腾了一天都没搞定,执行jar命令时将applet生成jar文件就报错...

landmine
2012/06/20
569
3
如何读取Access里的OLE类型的图片

身份证一类读卡器读取的照片信息,保存在Access数据库中一般为OLE型字段,图片为BMP格式,因为是用其读卡器写入的,其数据类型为常二进制数据。再用报表或EXCEL读取这些图片时,如果将该图片...

九月你好123
2016/08/19
16
0
使用JNA替代JNI调用本地方法

JNA全称是Java Native Access,是Sun推出的一种调用本地方法技术,比起它的同门师兄JNI,JNA大大简化了调用本地方法的过程,使用也比较方便, JNA是在JNI的基础上完善的,用青出于蓝而胜于蓝来形容...

thinkyoung
2014/10/25
0
0
applet调用exe签名问题,有碰到过的兄弟支个招下

先说本地: 硬件那边提供了对应的几个dll文件及一个exe文件,用jna本地调用dll折腾好久,发现原来还要在lib中加上这个exe文件,几经周折下终于搞定本地调用硬件,把对应的dll及一个exe加载进...

landmine
2012/06/25
388
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【JVM】JSTATD结合Java VisualVM进行远程监控JVM运行情况(二)

内存泄露指的是程序中动态分配内存给一些临时对象,但是对象不会被GC(java垃圾回收机制gabage collection)所回收,它始终占用内存。即被分配的对象很大但已无用; 内存溢出指的是程序运行过...

大白来袭
2分钟前
0
0
聊聊ribbon的超时时间设置

序 本文主要研究一下ribbon的超时时间设置 配置 实例 ribbon: ReadTimeout: 10000 ConnectTimeout: 10000 MaxAutoRetries: 0 MaxAutoRetriesNextServer: 1 eureka: enabled: ......

go4it
10分钟前
0
0
一行代码结果叹为观止,能做到这么极致的也只有python了

Python 这门语言非常的有趣,不仅可以做高大上的人工智能、大数据、机器学习。还可以用来做 Web、爬虫。还有其它很多的应用。今天我就给大家展示下一行 Python 代码都可以做些什么。 一行打印...

猫咪编程
14分钟前
0
0
KingShard使用

对于kingshard的功能,在git中可以看到明确的功能说明 主要功能: 1. 基础功能 支持SQL读写分离。 支持透明的MySQL连接池,不必每次新建连接。 支持平滑上线DB或下线DB,前端应用无感知。 支...

mickelfeng
16分钟前
0
0
Linux 下 查找某个字符串

如果你想在当前项目下 查找 "test" 这个字符串,可以这样: grep -rn "test" * * : 表示当前目录所有文件,也可以是某个文件名-r 是递归查找-n 是显示行号-R ...

nsns
16分钟前
0
0
数据结构 之 B树与红黑树

https://blog.csdn.net/v_july_v/article/details/6530142 http://www.cnblogs.com/CarpenterLee/p/5503882.html...

晨猫
16分钟前
0
0
Linux查看服务器总内存和总硬盘大小

一、linux CPU大小; 其实应该通过Physical Processor ID来区分单核和双核。而Physical Processor ID可以从cpuinfo或者dmesg中找到. flags 如果有 ht 说明支持超线程技术 判断物理CPU的个数可...

浮躁的码农
16分钟前
0
0
Postfix命令行说明

Postfix tips and Troubleshooting Commands Here's a list of stuff I user everyday and other email admins will also be using, Let me know if I missed anything List/Print current m......

mingle
23分钟前
0
0
是时候使用Helm了:Helm, Kubernetes的包管理工具

目前我们的一个产品共有4套环境:dev环境、test环境、staging环境、production环境。 其中dev, test, staging环境在一个Kubernetes集群上以不同namespace部署,production环境部署在另一个Kub...

xiaomin0322
30分钟前
0
0
常见的redis的序列化方式

概括 一般redis的序列化方式主要有:字符串序列化、json序列化、xml序列化、jdk序列化,具体可查阅org.springframework.data.redis.serializer.RedisSerializer 的实现类,其中对于json序列化...

菜蚜
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部