- 浏览: 983828 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
Java中调用DLL方法,是通过JNI接口实现的,http://www.ibm.com/developerworks/cn/java/l-linux-jni/
这里有详细的说明。大概是先用Java写一个接口类,然后用javah 生成一个xxx.h的c语言的头文件,然后用C实现这个头文件,在这个实现接口中调用其他已经实现的接口。
解压JNative-1.3.2.zip 获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。JNativeCpp.dll Windows下用的,拷到windows /
system32目录下;
libJNativeCpp.so Linux下使用的;
JNative.jar 这是一个扩展包,加载到你的程序中就可以。
一个简单例子
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class JNativeTest {
public static final int messageBox(int parentHandle, String message,
String caption, int buttons){// throws NativeException, IllegalAccessException {
JNative n = null;
try {
n = new JNative("User32.dll", "MessageBoxA"); //“.dll”不用也可以, 常量DLL_NAME的值为User32.dll
// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法
n.setRetVal(Type.INT); // 指定返回参数的类型
int i = 0;
n.setParameter(i++, Type.INT, "" + parentHandle);
n.setParameter(i++, Type.STRING, message);
n.setParameter(i++, Type.STRING, caption);
n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的参数类型和值
n.invoke(); // 调用方法
return Integer.parseInt(n.getRetVal());
}
catch(Exception ex){
ex.printStackTrace();
}
finally {
if (n != null)
try {
n.dispose();
} catch (NativeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 记得释放
}
return 0;
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
JNativeTest.messageBox(100,"这是使用jnative练习", "jnativetest", 1);
}
}
public static final int messageBox(int parentHandle, String message,
String caption, int buttons){// throws NativeException, IllegalAccessException {
JNative n = null;
try {
n = new JNative("User32.dll", "MessageBoxA"); //“.dll”不用也可以, 常量DLL_NAME的值为User32.dll
// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法
n.setRetVal(Type.INT); // 指定返回参数的类型
int i = 0;
n.setParameter(i++, Type.INT, "" + parentHandle);
n.setParameter(i++, Type.STRING, message);
n.setParameter(i++, Type.STRING, caption);
n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的参数类型和值
n.invoke(); // 调用方法
return Integer.parseInt(n.getRetVal());
}
catch(Exception ex){
ex.printStackTrace();
}
finally {
if (n != null)
try {
n.dispose();
} catch (NativeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 记得释放
}
return 0;
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
JNativeTest.messageBox(100,"这是使用jnative练习", "jnativetest", 1);
}
}
关于linux下编译 C代码部分说明:
对于linux不同版本,可能会导致libJNativeCpp.so不同
原带的libJNativeCpp.so 是在glic2.4下编译的
为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在for gcc3.4.6 glibc 2.3下。
编译办法:
在JNative-1.3.2-src\JNativeCpp\Release目录下
1、备份calls.o和 asm_io.o这两个Object文件
2、make clean
3、恢复到当前目录calls.o和 asm_io.o这两个Object文件
4、make
目前已经修改了Release目录下的makefile和subdir.mk文件,使得在make clean的时候不删除calls.o和 asm_io.o两个文件
附:linux 动态库搜索路径:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
原带的libJNativeCpp.so 是在glic2.4下编译的
为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在for gcc3.4.6 glibc 2.3下。
编译办法:
在JNative-1.3.2-src\JNativeCpp\Release目录下
1、备份calls.o和 asm_io.o这两个Object文件
2、make clean
3、恢复到当前目录calls.o和 asm_io.o这两个Object文件
4、make
目前已经修改了Release目录下的makefile和subdir.mk文件,使得在make clean的时候不删除calls.o和 asm_io.o两个文件
附:linux 动态库搜索路径:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
makefile 文件
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include subdir.mk
-include objects.mk
-include sources.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: libJNativeCpp.so
all: libJNativeCpp.so
# Tool invocations
libJNativeCpp.so: $(OBJS) $(OBJS_ASM) $(USER_OBJS)
@echo ''Building target: $@''
@echo ''Invoking: GCC C++ Linker''
g++ -shared -o"libJNativeCpp.so" $(OBJS) $(OBJS_ASM) $(USER_OBJS) $(LIBS)
@echo ''Finished building target: $@''
@echo '' ''
libJNativeCpp.so: $(OBJS) $(OBJS_ASM) $(USER_OBJS)
@echo ''Building target: $@''
@echo ''Invoking: GCC C++ Linker''
g++ -shared -o"libJNativeCpp.so" $(OBJS) $(OBJS_ASM) $(USER_OBJS) $(LIBS)
@echo ''Finished building target: $@''
@echo '' ''
# Other Targets
clean:
-$(RM) $(OBJS)$(C++_DEPS)$(CC_DEPS)$(C_DEPS)$(CPP_DEPS)$(LIBRARIES)$(CXX_DEPS)$(C_UPPER_DEPS) libJNativeCpp.so
-@echo '' ''
clean:
-$(RM) $(OBJS)$(C++_DEPS)$(CC_DEPS)$(C_DEPS)$(CPP_DEPS)$(LIBRARIES)$(CXX_DEPS)$(C_UPPER_DEPS) libJNativeCpp.so
-@echo '' ''
.PHONY: all clean dependents
.SECONDARY:
.SECONDARY:
-include ../makefile.targets
subdir.mk 文件
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS +=
../jni_util.c
../mem.c
C_SRCS +=
../jni_util.c
../mem.c
CPP_SRCS +=
../CallBack.cpp
../WindowProcUtil.cpp
../org_xvolks_jnative_JNative.cpp
../CallBack.cpp
../WindowProcUtil.cpp
../org_xvolks_jnative_JNative.cpp
ASM_SRCS +=
../asm_io.asm
../calls.asm
../asm_io.asm
../calls.asm
OBJS +=
./CallBack.o
./WindowProcUtil.o
./jni_util.o
./mem.o
./org_xvolks_jnative_JNative.o
./CallBack.o
./WindowProcUtil.o
./jni_util.o
./mem.o
./org_xvolks_jnative_JNative.o
OBJS_ASM +=
./asm_io.o
./calls.o
./asm_io.o
./calls.o
C_DEPS +=
./jni_util.d
./mem.d
./jni_util.d
./mem.d
CPP_DEPS +=
./CallBack.d
./WindowProcUtil.d
./org_xvolks_jnative_JNative.d
./CallBack.d
./WindowProcUtil.d
./org_xvolks_jnative_JNative.d
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
@echo ''Building file: $<''
@echo ''Invoking: GCC C++ Compiler''
g++ -I"/home/gongjan/jdk1.5.0_08/include/" -I"/home/gongjan/jdk1.5.0_08/include/linux" -O3 -Wall -c -fmessage-length=0 -Wl,--add-stdcall-alias -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo ''Finished building: $<''
@echo '' ''
%.o: ../%.asm
@echo ''Building file: $<''
@echo ''Invoking: GCC Assembler''
nasm -f elf -d ELF_TYPE -o"$@" "$<"
@echo ''Finished building: $<''
@echo '' ''
@echo ''Building file: $<''
@echo ''Invoking: GCC Assembler''
nasm -f elf -d ELF_TYPE -o"$@" "$<"
@echo ''Finished building: $<''
@echo '' ''
%.o: ../%.c
@echo ''Building file: $<''
@echo ''Invoking: GCC C Compiler''
gcc -I"/home/gongjan/jdk1.5.0_08/include/linux" -I"/home/gongjan/jdk1.5.0_08/include/" -O3 -Wall -c -fmessage-length=0 -Wl,--add-stdcall-alias -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo ''Finished building: $<''
@echo '' ''
文章出处:http://www.diybl.com/course/3_program/java/javajs/2008520/117063.html
@echo ''Building file: $<''
@echo ''Invoking: GCC C Compiler''
gcc -I"/home/gongjan/jdk1.5.0_08/include/linux" -I"/home/gongjan/jdk1.5.0_08/include/" -O3 -Wall -c -fmessage-length=0 -Wl,--add-stdcall-alias -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo ''Finished building: $<''
@echo '' ''
文章出处:http://www.diybl.com/course/3_program/java/javajs/2008520/117063.html
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1008调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1004Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 17651、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 896“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 8671、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 945概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 840下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 880<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1610安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1116Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 980///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 971J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1214六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1534HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2068最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 923Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 923在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1001maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 126024小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 102513.9. 使用Spring的 ...
相关推荐
JAVA调用动态链接库DLL之JNative学习源码,详细请参考:http://blog.csdn.net/testcs_dn/article/details/26980027
jnative框架调用dll动态库-简单demo(带dll文件)
是Java 调用DLL动态库框架,功能强大,告别往日的JNI,只需定义接口,就可以方便调用DLL库,为开发人员省了不少事。
利用JNative实现Java调用动态库.pdf
Java调用Win32获取窗口句柄JNative-1.3.2 Java调用Win32获取窗口句柄JNative-1.3.2
Java调用DLL源代码JNA和JNative
因为项目的需求,要在JAVA项目中调用Windows的Dll,之前用Jni调用过C写的Dll文件,比较麻烦,后在网上找到一个开源的组件JNative,使用后感觉比较方便。
java连接dll文件的驱动,jnative.jar,ClassLibrary1.dll,JNativeCpp.dll
这是项目中用到的java掉用本地动态链接库(DLL)的一个例子,用了JNative Jar包
java调用动态库(Jnative).zip
JAVA使用JNative包调用DLL文件
一个简单的jnative调用dll例子,因为网上找到java的都不包含dll代码,所以自己研究弄了个简单例子
一个用于在java中调用dll动态代码库的开源组件,JNative-1.3.2
因工作的缘故,有机会接触了Java本地方法调用...使用Java的JNI调用C/C++的动态联结库有个固定的步骤,下面将以一个最简单的HelloWorld例子程序来说明调用过程。这个HelloWorld的例子只是简单的显示HelloWorld消息。
JNative是目前比较简单的一个Java调用动态链接库jar包,使用简单,容易掌握,大家共同学习。
Jnative1.4_java调用动态库所需jar,里面包含了一个可以测试的动态库,可以自己拿下来玩玩。
包括java调用动态库的实例与总结,其中有jna调用动态库和jnative调用动态库,分为直接java文件main方法调用和web项目中的servlet调用两种方法
NULL 博文链接:https://unifocus.iteye.com/blog/678463
java利用jnative调用DLL.txt
包含jna.jar,JNative.jar,VC++创建DLL例子,VC++调用DLL例子,JAVA-JNA、JNative调用DLL例子