- 浏览: 7249895 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
如何通过JNA调用Linux系统自带的libc.so动态库的printf函数,现在再通过一个简单的例子介绍如何通过JNA调用自己编写的C动态库并在动态库中调用Java的函数(回调)。
编写C代码:
#include <stdio.h>
static int (*AddByCallback)(int a,int b)=NULL;
void RegisterAdd(int (*callback)(int,int))
{
AddByCallback=callback;
}
void DoAddByCallback(int a,int b)
{
int res;
if(AddByCallback==NULL)
{
printf("error: please register the Add function first!\n");
return;
}
res=AddByCallback(a,b);
printf("Java execute add: %d+%d=%d\n",a,b,res);
}
2.编译C代码:
gdyt:/home/yc/soft/test # ll
total 36
-rwxr-xr-x 1 root root 5812 Dec 22 23:14 libtest.so
-rw-r--r-- 1 root root 61 Dec 22 23:14 test.c
-rw-r--r-- 1 root root 367 Dec 22 23:17 testcallback.c
-rwxr-xr-x 1 root root 19584 Dec 22 23:14 testlib.c
gdyt:/home/yc/soft/test # gcc -fPIC -shared testcallback.c -o libtestcallback.so
gdyt:/home/yc/soft/test # ll
total 48
-rwxr-xr-x 1 root root 5812 Dec 22 23:14 libtest.so
-rwxr-xr-x 1 root root 9887 Dec 22 23:19 libtestcallback.so
-rw-r--r-- 1 root root 61 Dec 22 23:14 test.c
-rw-r--r-- 1 root root 367 Dec 22 23:17 testcallback.c
-rwxr-xr-x 1 root root 19584 Dec 22 23:14 testlib.c
3.查看so并拷贝到lib目录
查看so的依赖关系
gdyt:/home/yc/soft/test # ldd libtestcallback.so
linux-vdso.so.1 => (0x00007fff24dfe000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc91c7ea000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc91cd78000)
添加相关的连接
gdyt:/home/yc/soft/test # ln -s libtestcallback.so libJnaCbApi.so.6
gdyt:/home/yc/soft/test # ll
total 48
lrwxrwxrwx 1 root root 18 Dec 22 23:24 libJnaCbApi.so.6 -> libtestcallback.so
-rwxr-xr-x 1 root root 5812 Dec 22 23:14 libtest.so
-rwxr-xr-x 1 root root 9887 Dec 22 23:19 libtestcallback.so
-rw-r--r-- 1 root root 61 Dec 22 23:14 test.c
-rw-r--r-- 1 root root 367 Dec 22 23:17 testcallback.c
-rwxr-xr-x 1 root root 19584 Dec 22 23:14 testlib.c
查看相关的依赖关系
gdyt:/home/yc/soft/test # ldd libJnaCbApi.so.6
linux-vdso.so.1 => (0x00007fffe95ff000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb9e101d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb9e15ab000)
4.拷贝到lib目录
gdyt:/home/yc/soft/test # cp libtestcallback.so lib/
5.编写Java代码:
package com.etrip;
import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Native;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:
* @Date:2012-12-22
* @author longgangbai
* @version 1.0
*/
public class JNACallback {
// 定义接口CLibrary,继承自com.sun.jna.Library
public interface CLibrary extends Library {
// 定义接口JavaCallbackAdd,继承自com.sun.jna.Callback
interface JavaCallbackAdd extends Callback {
int CallbackAdd(int a, int b);
}
// 动态库的函数声明
void RegisterAdd(JavaCallbackAdd callback);
void DoAddByCallback(int a, int b);
}
public static void main(String[] args) {
// 接口实例化并初始化实例
CLibrary lib = (CLibrary) Native
.loadLibrary("JnaCbApi", CLibrary.class);
if(lib!=null){
System.out.println("JnaCbApi加载成功...");
}
CLibrary.JavaCallbackAdd callback = new CLibrary.JavaCallbackAdd() {
// 实现CallbackAdd函数
public int CallbackAdd(int a, int b) {
return a + b;
}
};
// 调用动态库的函数
lib.RegisterAdd(callback);
// 由动态库执行CallbackAdd回调函数
lib.DoAddByCallback(1, 2);
}
}
6.测试
发表评论
-
【转】Django resources
2014-01-23 14:35 10715Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197556pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 256111> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9137在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2777安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3511在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1601在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2189在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1549在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1690在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1050http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3285TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51442文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 13992最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8622TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2652TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2755TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2395TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2711TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2639TestNG官方网站: http://testng.or ...
相关推荐
详细演示了如何通过JNA实现以下形式的动态链接库接口: 1:基本数据类型 2:基本数据类型的指针和引用 3:结构体 4:结构体的指针和引用 5:函数指针和回调函数 6:字符串指针 7:输入一个数组 8:输出一个数组并...
springboot+jna/jni调用动态so/dll库
jna调用动态库的一般步骤,以及操作的实例,具体步骤的解析
java使用(jna)调用c/c++第三方动态库 dll文件 所用jar包
java 调用c动态库JNA—JNI终结者,java调用dll、ocx、so最简单的方法
亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。
这几天搞搞JNA,主要是组内...C++部分使用ACE实现了一个线程,线程中调用Java部分的回调函数。 C++使用vc8开发,代码跨平台,不过偷懒,没写makefile, 其中使用了ACE这个库。 Java部分,使用eclipse。jdk1.5版本。
jni调用C++动态库,jna调用C++动态库,eclipse maven project
Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回-附件资源
java调用c++动态库例子,NetSdk.dll 文件拷贝至JDK/bin目录下
java获取dll动态库源码分享。通过jna加载动态库,然后初始化动态库,打开动态库,在通过指针获取动态库里面的数据。
JNA方法调用第三方提供的动态库时,搭建JNA环境所需的jna.jar包,本资源是32位操作系统使用
jna调用C语言函数库dll、so jni介绍
jna调用dll省去烦人的JNI编写,并且实现了自定义接口事件,实现C回调java
java后端springBoot框架使用jna调取C语言的dll接口(停车场道闸接口) 包含构造体的调用, 回调函数的调用,JNA和C / C ++的数据类型映射,Pointer类型的使用
一个java通过jna调用C++ dll库的列子,包括C++dll中含回调函数,回调java方法
Jna调用dll动态库相关jar包,其中包括jna-3.5.1.jar和platform-3.5.1.jar
java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)
NULL 博文链接:https://javaeye-hua.iteye.com/blog/1853006