啰嗦话不多说,网上很多这方面的教程,但是我也看了好久也能运行一个成功的例子,因为很多地方都忽略了

下面来演示个完整的jna例子

1. 随便使用个c或c++开发工具(我用的VC++6.0)

打开软件新建个dll工程,VC里面是win32 dynamic-link library,输入工程名称后点击下一步,然后再选a simple dll project,第一项是空的project,我比较懒就选第二个,有简单的文件存在,然后自己拿来改下,最后确定就能看到工程已经建好了

2. 写C的接口文件,就是以.h结尾的那个文件,选择文件-->新建-->C/C++Header File文件,然后就能看到工程的header文件中有了个新的.h文件(我起的名字是test)

然后打开test.h文件,声明我的接口咯

这里值得注意的地方是必须写(extern "c"的声明,不然到时候使用java的jna是不可能匹配到这个方法的,很明显会抛出异常java.lang.UnsatisfiedLinkError: Error looking up function 'add': ÕҲ»µ½ָ¶¨µ),这个文件相当于我们的java中的interface,你可以这样理解

extern "C" _declspec(dllexport) int add(int first, int second);  

3. 写C接口的实现类,如何实现这个add方法

打开source file很明显看到有一个文件是xxx.cpp(xxx是以你的工程名字来定的), 另外一个是stdafx.cpp, 这个不需要管他, 我们就在xxx.cpp中写代码吧

xxx.cpp原本就存在内容,你不喜欢的,可以直接新建一个source file

// sss.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{return TRUE;
}

然后我们在这些内容下添加我们的add方法实现,要include我们刚刚写的test.h文件

// sss.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "test.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{return TRUE;
}int add(int a, int b){return a+b;
}

4. C方面的基本的完成了,最后就是打包成dll,直接按F7,全自动打包,然后找到这个工程的目录下,看到有一个debug的文件夹,里面就有一个dll,等下直接扔到java工程中

5. 打开eclipse新建一个java project, 把刚刚的dll拷贝到工程的目录下点着工程的名字,然后黏贴下去就可以了, 然后随便在网上找个jna.jar文件,build path到这个工程中

然后开始我们的java接口, loadLibrary第一个参数就是你的dll名字,第二个就是当前接口的.class类型,接口里面的方法名要跟C的接口方法名一直

public interface TestJNA extends StdCallLibrary {public abstract int add(int a, int b);TestJNA INSTANCE = (TestJNA) Native.loadLibrary("test", TestJNA.class);
}

写完就调用测试下

public class TEST {/*** @param args*/public static void main(String[] args) {System.out.println(TestJNA.INSTANCE.add(1, 2));}}

JNA 详细完整实例相关推荐

  1. JsTree 最详细教程及完整实例

    JsTree 最详细教程及完整实例 JsTree是一个jquery的插件,它提交一个非常友好并且强大的交互性的树,并且是完全免费或开源的(MIT 许可).Jstree技持Html 或 json格式的的 ...

  2. java点赞功能实现_JavaWeb中点赞功能的实现及完整实例

    实现原理 1.功能描述:一个用户对同一文章只能点赞一次,第二次就是取消赞 2.建立一个点赞表great,字段有文章ID(aid),点赞用户ID(uid) 3.当有用户进行点赞行为时,使用aid和uid ...

  3. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...

    由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...

  4. JavaWeb中点赞功能的实现及完整实例

    实现原理 1.功能描述:一个用户对同一文章只能点赞一次,第二次就是取消赞 2.建立一个点赞表great,字段有文章ID(aid),点赞用户ID(uid) 3.当有用户进行点赞行为时,使用aid和uid ...

  5. php ajax 点赞实例下载,php+mysql结合Ajax实现点赞功能完整实例

    时间:2015-03-03来源:www.aspku.com 作者:源码库 文章热度: ℃ 这篇文章主要介绍了php+mysql结合Ajax实现点赞功能,以一个完整实例形式详细分析了实现点赞功能中涉及的 ...

  6. Yii2搭建后台并实现rbac权限控制完整实例教程

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...

  7. c语言如何生成字符型动态数组,C语言构建动态数组完整实例

    C语言构建动态数组完整实例 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; ...

  8. python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例

    冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...

  9. .Net/C# 与 J2EE/Java Web Service 互操作完整实例

    http://www.cnblogs.com/Microshaoft/archive/2005/08/18/217213.html .Net 与 J2EE/Java Web Service 互操作完整 ...

最新文章

  1. tar -xf_青铜表选什么?不可错过的XF帝舵碧湾小铜盾
  2. 判断点是否在多边形内——射线法
  3. 听说你想去大厂看妹子,带你看看字节跳动Android开发岗面试是啥样?
  4. 好的MongoDB中文文档
  5. oracle 历史查询是哪个机器发起的,Oracle 查询历史连接主机信息
  6. SIFT算法论文:译文、详解
  7. Qt 局域网聊天工具
  8. Java、JSP水费管理系统
  9. python 广告联盟_利用京东联盟API获取自定义推广链接
  10. 柱状图折线图混合使用
  11. 英文状态下输入字母,字母之间的间隔较大怎么解决?
  12. Android 部分手机拍照后获取的图片被旋转
  13. ipad iphone开发_如何在iPhone或iPad上“不信任”计算机
  14. 路由器mw320虚拟服务器,新版水星MW320R路由器怎么设置_新版水星MW320R路由器设置教程-192路由网...
  15. 这个世界,没有传奇(一)——挺住,就是一切
  16. python精彩编程200例 pdf-Python创意编程200例turtle篇
  17. jeesite4 图片上传总结
  18. 湖北省制造业高质量发展专项奖励申报条件,2022年揭榜挂帅项目指南
  19. Stream.builder
  20. 自动驾驶技术:前景、优势与挑战

热门文章

  1. java 不停的换ip地址_为什么电脑IP地址总是自动改变
  2. vue 文本显示组件_一个Vue组件,可在您键入时突出显示文本
  3. 【软件需求规格说明书】苏科大校园app软件需求规格说明书
  4. 24小时打卡北上广深,用不到300块
  5. DAO决策下的Plato Farm,IEO收益用于生态发展
  6. python绘制反比例函数_怎样在几何画板中画可变的反比例函数
  7. LGVL学习日志(一):PC端模拟器环境的安装 VS2019
  8. rhel6破解root密码
  9. 重庆邮电大学本科毕业论文答辩PPT模板
  10. java实现蛇形数组