JNA学习笔记.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JNA学习笔记

JNA学习笔记JNA是什么:JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个/view/993516.htmjava接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。JNA优点:JNA可以让你像调用一般java方法一样直接调用本地方法。就和直接执行本地方法差不多,而且调用本地方法还不用额外的其他处理或者配置什么的,也不需要多余的引用或者编码,使用很方便。JNA使用:1)POMdependencies dependency groupIdnet.java.dev.jna/groupId artifactIdjna/artifactId version3.4.0/version /dependency/dependencies在POM文件中加入上述dependency2)准备一个dll文件示例文件(仅核心代码):main.h#ifndef __MAIN_H__ #define __MAIN_H__ #include windows.h struct aaa { int a; float b; double c;}; …#define DLL_EXPORT __declspec(dllexport) … #ifdef __cplusplus extern C { #endif DLL_EXPORT int add(int a,int b); DLL_EXPORT int factorial(int n); DLL_EXPORT void replace(int *c);DLL_EXPORT void replaceA(aaa *c);DLL_EXPORT void replaceReference(int n);DLL_EXPORT void rrreference(int ***n, int size);DLL_EXPORT void arrayTest(double a[], int size); #ifdef __cplusplus } #endif #endif // __MAIN_H__ main.cpp#include main.h #include iostreamusing namespace std;int add(int a,int b){ return a + b; } int factorial(int n){ int i; int r = 1; for(i=1;in+1;i++) { r = r*i; } return r; } void replace(int *c) { if(c != NULL) { *c = 1; }}void replaceA(aaa *c) { if(c != NULL) { c-a = 1; c-b = 2.0f; c-c = 3.1; }}void replaceReference(int n) { n = 100;}void rrreference(int ***n, int size) { int **p = *n; try { for(int i=0; isize; ++i) { for(int j=0; jsize; ++j) { *(*(p+i)+j) = i*j; } } } catch (...) { return; }}void arrayTest(double a[], int size) { for(int i=0; isize; ++i) { couta[i] ; } coutendl;}…这里的dll是一个十分简单的示例,包含了普通类型、自定义结构体、指针、引用、数组的相关使用部分。将编译得到的dll文件(这里是”JNATestDll.dll”)放在java工程的根目录下(根据需要,可以自行调整)3)编写Java代码3-1)创建接口public interface JNATestDll extends Library { JNATestDll instanceDll = (JNATestDll)Native.loadLibrary(E:\\GIT\\TestJNA\\JNATestDLL.dll,JNATestDll.class);}Tips1.这里是直接使用绝对路径。可以把dll放在Java_Home下面,然后直接用文件名。2.接口继承自com.sun.jna.Library。3.接口内部需要定义一个公共静态常量(这里是instanceDll),通过它调用

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档