关于JNA、JNI的使用注意

闲话不说,项目中要用到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的规范就知道,JVM在对应一个比较复杂的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的规范,良少的文章里边有,就不上传了





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值