JNA 详细完整实例
啰嗦话不多说,网上很多这方面的教程,但是我也看了好久也能运行一个成功的例子,因为很多地方都忽略了
下面来演示个完整的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 详细完整实例相关推荐
- JsTree 最详细教程及完整实例
JsTree 最详细教程及完整实例 JsTree是一个jquery的插件,它提交一个非常友好并且强大的交互性的树,并且是完全免费或开源的(MIT 许可).Jstree技持Html 或 json格式的的 ...
- java点赞功能实现_JavaWeb中点赞功能的实现及完整实例
实现原理 1.功能描述:一个用户对同一文章只能点赞一次,第二次就是取消赞 2.建立一个点赞表great,字段有文章ID(aid),点赞用户ID(uid) 3.当有用户进行点赞行为时,使用aid和uid ...
- python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...
- JavaWeb中点赞功能的实现及完整实例
实现原理 1.功能描述:一个用户对同一文章只能点赞一次,第二次就是取消赞 2.建立一个点赞表great,字段有文章ID(aid),点赞用户ID(uid) 3.当有用户进行点赞行为时,使用aid和uid ...
- php ajax 点赞实例下载,php+mysql结合Ajax实现点赞功能完整实例
时间:2015-03-03来源:www.aspku.com 作者:源码库 文章热度: ℃ 这篇文章主要介绍了php+mysql结合Ajax实现点赞功能,以一个完整实例形式详细分析了实现点赞功能中涉及的 ...
- Yii2搭建后台并实现rbac权限控制完整实例教程
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...
- c语言如何生成字符型动态数组,C语言构建动态数组完整实例
C语言构建动态数组完整实例 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; ...
- python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例
冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...
- .Net/C# 与 J2EE/Java Web Service 互操作完整实例
http://www.cnblogs.com/Microshaoft/archive/2005/08/18/217213.html .Net 与 J2EE/Java Web Service 互操作完整 ...
最新文章
- tar -xf_青铜表选什么?不可错过的XF帝舵碧湾小铜盾
- 判断点是否在多边形内——射线法
- 听说你想去大厂看妹子,带你看看字节跳动Android开发岗面试是啥样?
- 好的MongoDB中文文档
- oracle 历史查询是哪个机器发起的,Oracle 查询历史连接主机信息
- SIFT算法论文:译文、详解
- Qt 局域网聊天工具
- Java、JSP水费管理系统
- python 广告联盟_利用京东联盟API获取自定义推广链接
- 柱状图折线图混合使用
- 英文状态下输入字母,字母之间的间隔较大怎么解决?
- Android 部分手机拍照后获取的图片被旋转
- ipad iphone开发_如何在iPhone或iPad上“不信任”计算机
- 路由器mw320虚拟服务器,新版水星MW320R路由器怎么设置_新版水星MW320R路由器设置教程-192路由网...
- 这个世界,没有传奇(一)——挺住,就是一切
- python精彩编程200例 pdf-Python创意编程200例turtle篇
- jeesite4 图片上传总结
- 湖北省制造业高质量发展专项奖励申报条件,2022年揭榜挂帅项目指南
- Stream.builder
- 自动驾驶技术:前景、优势与挑战