您的位置:首页 > 编程语言 > Java开发

关于JNA、JNI的使用注意

2015-05-07 10:05 267 查看
闲话不说,项目中要用到Java调用JNA。。。然后就投入学习。。。

引学习连接,JNA参考良少大神滴~三篇文章
http://blog.csdn.net/shendl/article/details/3589676 http://blog.csdn.net/shendl/article/details/3599849 http://blog.csdn.net/shendl/article/details/3599854
额这个地方要额外提及一下,关于生成dll之后,放的位置,

如果放的位置不对,会报java.lang.UnsatisfiedLinkError: Unable to load library 的异常

如果是javaProject直接放到项目的目录下,啥叫项目的目录来,来个简单的,那就是

这个目录下。。。额。。如果是web项目的参考这篇文章,
http://www.cnblogs.com/zfc2201/archive/2011/09/02/2163268.html
当然也有动态加载dll的
http://blog.csdn.net/ctllin/article/details/32726799
JNA还是很简单的 经过实践,都OK。。。但是到自己的弄的时候就崩溃了

直接哭死了要。。。简单说明一下

struct coord {
int type;
double a, b;

};

struct target {
short code;     
struct coord coord;

};

struct track {
int type;
/* target list */
int ntarget;
struct target targets[128];
};

这酸爽那,各种试验了一般,JVM各种崩溃报错。。。又不会处理肿么办。。好吧。。其实吧,看看JNA人家也没说一定要各种对应,自己写个方法把c里边的目标方法包含进去,期间不要涉及c的struct不就OK了?干啥一定要对应,例如用string接受,好吧,这样性能上看貌似丢失了,但是,仔细看一下jna的规范就知道,JV
4000
M在对应一个比较复杂的struct的时候的办法浪费的资源也不少对吧?所以,效率吗,不知道,但是上手程度 duangduang的就降低了啊,还有就是基本所有的例子 c方法的返回值都是void,我这用java用string接受的话,那么c用char*(JNA规范)不就搞定了吗,困挠了好长时间的问题就搞定了!

_declspec(dllexport)char* toParse(const unsigned char *packet, const int nbytes,const int type);//
void parse(const unsigned char *packet, const int nbytes, const int type, struct track *track, char *text);//


好吧。。。以后再遇到JNA的问题,如果自定义结构体比较复杂麻烦的话,还是尽量的使用简单的方法,实在是看不懂JVM崩溃的日志啊。。。尼玛

============================================不得不说的故事============================================

中间在没想到c中封装目标方法的时候,JNA搞不定的时候,想尝试一下JNI(后来果断是TM的自虐啊!!有么有!!)

参考了许多文章觉得这个还算是靠谱
http://www.cnblogs.com/charley_yang/archive/2011/03/13/1982516.html
下边并不是纠正神马错误之类的,仅仅是做一个补充,因为可能作者打的太顺手了,呼呼的就搞定了。。我这跟着学习做的时候,各种搞不定那,嗨嗨

第一个就是关于.class文件变为.h文件的问题

找位置一定不能找错了

参考文章
http://blog.csdn.net/beroy/article/details/4155482
一定要这么弄哇,不要跑到jni的包名下边了。。。就在classes这个地方 然后jni.test

第二个问题就是关于,include<jni.h>报错肿么办  本人用的是vs2012

参考文章http://www.it165.net/pro/html/201402/9838.html

OK都搞定了就阔以了。。。但是jni真TM难用。。果断的投入JNA的怀抱

P.S.:JNA的规范,良少的文章里边有,就不上传了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni java jna