- 浏览: 1049544 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (228)
- Web开发 (72)
- 页面相关 (43)
- java (33)
- struts (3)
- spring (14)
- oracle (16)
- mysql (13)
- SqlServer (13)
- tomact (7)
- weblogic (2)
- groovy (3)
- JFreeChart (4)
- JNative (2)
- dll (2)
- myeclipse (6)
- eclipse (10)
- svn (1)
- 正则表达式 (2)
- 设计模式 (1)
- 行业积累和感悟 (9)
- c# (2)
- maven (4)
- Node.js (1)
- 网络相关 (1)
- ftp文件上传下载 (2)
- jQuery (6)
- html5 (1)
- linux (5)
- PowerDesigner (2)
- Python (5)
- php (1)
- web service (5)
- MyBatis (4)
- 缓存相关 (3)
- Work summary (3)
- git&github (1)
- dubbo (1)
最新评论
-
fj520lb:
[flash=200,200][url][img][list] ...
Eclipse中将web项目自动发布到Tomcat webapps下 -
追梦少年蒋富贵:
楼主 你这个有问题 在 mapper 配置那段代码之后 ,不通 ...
spring+Mybatis+Ehcache整合 -
Blod123:
如果不在mapper中写 <cache type=&qu ...
spring+Mybatis+Ehcache整合 -
birllove:
看到这个终于搞好了 多谢哈
The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法 -
ccwwdd:
很好用。O(∩_∩)O谢谢分享!!!
ajax异步文件上传,servlet处理,含demo
下文参考自:http://blog.163.com/wex660@126/blog/static/2415306520103142363964/,
因为项目需要,用到了java调用dll文件中的方法。写成dll文件大多是用C、VB、Delphi语言弄成的,对于我这个纯粹干java的人员来说,着实让我太为难了。唉,也就是说我编程底子没有搭好,惭愧。要是这些语言我都会些,也不至少让我了解并应用这个技术花了很长时间。
我是用JNative技术做的一个例子。需要用到的是:JNative.jar,JNative.dll这些是在Windows中开发的,如果用Linus要用到libJNative.so
1.将JNative.dl,所要读的dll文件l放在C:\windows\system32下面。
2.将JNative.jar放在你的项目下的lib下面
3.将要读的dll文件放在跟使用的类相同的目录下。
4.我的类的源码
package sms;
我是用JNative技术做的一个例子。需要用到的是:JNative.jar,JNative.dll这些是在Windows中开发的,如果用Linus要用到libJNative.so
1.将JNative.dl,所要读的dll文件l放在C:\windows\system32下面。
2.将JNative.jar放在你的项目下的lib下面
3.将要读的dll文件放在跟使用的类相同的目录下。
4.我的类的源码
package sms;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
public class SystemTime extends AbstractBasicData<SystemTime>{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
/**
* 分配内存,并返回指针
*/
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
return pointer;
}
* 分配内存,并返回指针
*/
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
return pointer;
}
/**
* 内存大小
*/
public int getSizeOf(){
return 8 * 2;
}
* 内存大小
*/
public int getSizeOf(){
return 8 * 2;
}
/**
* 获取通过内存指针解析出结果
*/
public SystemTime getValueFromPointer() throws NativeException {
wYear = getNextShort();
wMonth = getNextShort();
wDayOfWeek = getNextShort();
wDay = getNextShort();
wHour = getNextShort();
wMinute = getNextShort();
wSecond = getNextShort();
wMilliseconds = getNextShort();
return this;
}
* 获取通过内存指针解析出结果
*/
public SystemTime getValueFromPointer() throws NativeException {
wYear = getNextShort();
wMonth = getNextShort();
wDayOfWeek = getNextShort();
wDay = getNextShort();
wHour = getNextShort();
wMinute = getNextShort();
wSecond = getNextShort();
wMilliseconds = getNextShort();
return this;
}
public SystemTime() throws NativeException{
super(null);
createPointer();
}
super(null);
createPointer();
}
public String toString(){
return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond + ":" + wMilliseconds;
}
return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond + ":" + wMilliseconds;
}
public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {
// 创建对象
JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");
SystemTime systemTime = new SystemTime();
// 设置参数
nGetSystemTime.setParameter(0, systemTime.getPointer());
nGetSystemTime.invoke();
// 解析结构指针内容
return systemTime.getValueFromPointer();
}
// 创建对象
JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");
SystemTime systemTime = new SystemTime();
// 设置参数
nGetSystemTime.setParameter(0, systemTime.getPointer());
nGetSystemTime.invoke();
// 解析结构指针内容
return systemTime.getValueFromPointer();
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
System.err.println(GetSystemTime());
}
System.err.println(GetSystemTime());
}
}
注:Kernel32.dll是我要读的dll文件,GetSystemTime是dll文件中的方法(就是所谓的函数名)
That's ok,相信我这么不懂dll的都能做出来,你也能
注:Kernel32.dll是我要读的dll文件,GetSystemTime是dll文件中的方法(就是所谓的函数名)
That's ok,相信我这么不懂dll的都能做出来,你也能
因为项目需求,需要在java中调用dll文件。测试过几种方法,发现还是JNative最为便利。
1. 安装
JNativeCpp.dll 放在windows/system32目录下
libJNativeCpp.so linux下使用
JNative.jar 导入工程中
2. 使用
2.1. 加载dll文件
JNative可使用两种方式加载dll文件:
使用System.loadLibrary加载
使用此方法可加载系统目录中的dll文件。可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。
使用System.load加载
此方法参数为dll文件全路径名。
2.2. 调用函数
1、首先创建JNative对象:
JNative jnative = new JNative(dll文件名, 函数名);
2、设置返回值类型:
jnative.setRetVal(Type.INT);
3、设置参数
jnative.setParameter(0, Type.STRING, …); //设置第一个参数为字符串
jnative.setParameter(1, Type.INT, String.valueof(…)); //设置第二个参数为整数
4、执行
n.invoke();
5、获取返回值
Integer.parseInt(jnative.getRetVal());
2.3. 一个实例
来自国外网上的一个实例,用于摸索struct处理方法:
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
/**
* SystemTime
*
* typedef struct _SYSTEMTIME {
* WORD wYear;
* WORD wMonth;
* WORD wDayOfWeek;
* WORD wDay;
* WORD wHour;
* WORD wMinute;
* WORD wSecond;
* WORD wMilliseconds;
* } SYSTEMTIME,
*/
public class SystemTime extends AbstractBasicData<SystemTime> {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
/**
* 分配内存,并返回指针
*/
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
return pointer;
}
/**
* 内存大小
*/
public int getSizeOf() {
return 8 * 2;
}
/**
* 获取通过内存指针解析出结果
*/
public SystemTime getValueFromPointer() throws NativeException {
wYear = getNextShort();
wMonth = getNextShort();
wDayOfWeek = getNextShort();
wDay = getNextShort();
wHour = getNextShort();
wMinute = getNextShort();
wSecond = getNextShort();
wMilliseconds = getNextShort();
return this;
}
public SystemTime() throws NativeException {
super(null);
createPointer();
}
public String toString() {
return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond
+ ":" + wMilliseconds;
}
public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {
// 创建对象
JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");
SystemTime systemTime = new SystemTime();
// 设置参数
nGetSystemTime.setParameter(0, systemTime.getPointer());
nGetSystemTime.invoke();
// 解析结构指针内容
return systemTime.getValueFromPointer();
}
public static void main(String[] args) throws NativeException, IllegalAccessException {
System.err.println(GetSystemTime());
}
}
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
/**
* SystemTime
*
* typedef struct _SYSTEMTIME {
* WORD wYear;
* WORD wMonth;
* WORD wDayOfWeek;
* WORD wDay;
* WORD wHour;
* WORD wMinute;
* WORD wSecond;
* WORD wMilliseconds;
* } SYSTEMTIME,
*/
public class SystemTime extends AbstractBasicData<SystemTime> {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
/**
* 分配内存,并返回指针
*/
public Pointer createPointer() throws NativeException {
pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
return pointer;
}
/**
* 内存大小
*/
public int getSizeOf() {
return 8 * 2;
}
/**
* 获取通过内存指针解析出结果
*/
public SystemTime getValueFromPointer() throws NativeException {
wYear = getNextShort();
wMonth = getNextShort();
wDayOfWeek = getNextShort();
wDay = getNextShort();
wHour = getNextShort();
wMinute = getNextShort();
wSecond = getNextShort();
wMilliseconds = getNextShort();
return this;
}
public SystemTime() throws NativeException {
super(null);
createPointer();
}
public String toString() {
return wYear + "/" + wMonth + "/" + wDay + " at + " + wHour + ":" + wMinute + ":" + wSecond
+ ":" + wMilliseconds;
}
public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {
// 创建对象
JNative nGetSystemTime = new JNative("Kernel32.dll", "GetSystemTime");
SystemTime systemTime = new SystemTime();
// 设置参数
nGetSystemTime.setParameter(0, systemTime.getPointer());
nGetSystemTime.invoke();
// 解析结构指针内容
return systemTime.getValueFromPointer();
}
public static void main(String[] args) throws NativeException, IllegalAccessException {
System.err.println(GetSystemTime());
}
}
评论
4 楼
luanxiyuan
2015-01-31
kangkang0102 写道
父类的那两个方法能不能享下啊,楼主!!!
自己上网找下源包吧
3 楼
kangkang0102
2015-01-28
父类的那两个方法能不能享下啊,楼主!!!
2 楼
luanxiyuan
2015-01-24
kangkang0102 写道
systemTime.getPointer() getNextShort();
这两个方法在哪里呢??
这两个方法在哪里呢??
有可能是在父类AbstractBasicData中的方法
1 楼
kangkang0102
2015-01-22
systemTime.getPointer() getNextShort();
这两个方法在哪里呢??
这两个方法在哪里呢??
发表评论
-
Google开源项目ZXing(二维条码编解码)简单使用(Java版)
2015-02-11 23:14 1435ZXing (pronounced "zebra ... -
Java 8新特性,让你不要再用循环了
2015-02-09 20:23 1639Java 8中的新功能特性改变了游戏规则。对Java开发者来 ... -
java如何获取当前机器ip和容器port
2014-10-15 20:25 5114获取当前机器ip: private static Str ... -
DateConverter does not support default String to 'Date' conversion.
2014-07-21 13:55 2470在使用 beanutils 工具类时,因为beanUtils ... -
Java对List的排序
2014-07-16 16:47 887第一种方法,就是list中对象实现Comparable接口 ... -
JAVA与.NET的同步DES加解密
2014-06-16 09:50 1343.NET中DES加解密 #region DESEnCo ... -
Java中文字符所占的字节数
2014-03-02 15:54 750Java语言中,中文字符所占的字节数取决于字符的编码方式,一 ... -
Java反射教程
2014-02-08 17:24 605什么是反射?反射有什 ... -
java.lang.OutOfMemoryError: PermGen space
2013-10-09 14:22 867今天还碰到了PermGen Space 的异常,搜索了一下有 ... -
Java和C#通过DES加密得到相同数据
2013-09-06 23:39 6663早晨的时候,一个朋友在MSN上问我.NET的DES算法实现 ... -
利用IKVM在C#中调Java程序(总结版)
2013-09-05 20:36 16631IKVM.NET是一个针对Mono和微软.net框架的ja ... -
3des的加、解密过程
2013-08-29 23:28 93153DES(或称为Triple DES)是三重数据加密算法(TD ... -
将给定字符串倒序
2013-08-07 08:28 1107/** * @Description: 将给定字符串倒 ... -
java十进制和二进制相互转换
2013-08-05 22:09 4891/** * @Description: 十进制 ... -
String类型转换成boolean类型
2013-08-02 01:20 9951通过boolean包装类Boolean的parseBoolea ... -
String、StringBuffer、StringBuilder的区别
2013-07-27 11:28 982是 String , StringBuffer ... -
textarea内容换行输入,存入数据库,取出如何解析
2013-07-12 23:46 6911从数据库中取出来之后,我们要通过程序的split(&quo ... -
MD5实现加密解密
2013-04-01 21:17 1346import java.security.MessageD ... -
如何实现String型时间加一天和减一天
2013-01-21 10:23 9250增加一天和减少一天分别采用了两种方法,喜欢那种用哪种,代码 ... -
jnative在linux下对c程序的动态链接库的调用问题及解决方案
2013-01-02 23:34 1299本文参考自:http://blog.csdn.net/ ...
相关推荐
这篇博客文章可能介绍了如何利用JNative在Java程序中集成和调用DLL的功能。 首先,我们需要理解JNI的概念。JNI是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。它提供了一套接口,使得Java程序员...
### Java通过JNative调用DLL的关键知识点 #### JNative简介 JNative是一个强大的Java库,允许Java应用程序直接调用本地动态链接库(DLL)或共享库。它为开发者提供了一个简单而灵活的方式来集成本地代码与Java环境...
首先定义Java中的JNI接口,然后使用`javah`生成C/C++的头文件,接着编写并编译DLL,最后在Java程序中加载并调用DLL函数。这个过程虽然复杂,但是一旦熟悉了,就能灵活地在Java和本地代码之间建立桥梁,充分利用两者...
本篇文章将详细介绍如何使用jnative框架在Java中调用DLL动态库,并提供一个简单的示例。 首先,理解jnative框架的核心概念。jnative是一个纯Java库,它提供了一种简单的方式来调用C和C++的函数,无需编写JNI头文件...
以下是使用JNative调用DLL的步骤: 1. **准备DLL文件**:确保你有需要调用的DLL文件,并将其放在Java能够找到的路径下,比如系统的PATH环境变量所包含的目录,或者放在Java类路径下的native库目录。 2. **配置...
`JNative.jar`包含了JNative的实现,`TestJNative.java`是使用JNative调用DLL的示例。 3. **VC++创建DLL**: `CreateDLL.dll`是由Visual C++(VC++)编译生成的动态链接库,通常包含了一些可供其他程序调用的函数...
标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...
### Java调用DLL:JNative概述 在Java项目中,有时候需要调用本地系统的动态链接库(DLL)来实现特定的功能。传统的做法是通过Java Native Interface (JNI)来进行调用,但这往往涉及到复杂的配置和繁琐的过程。为了...
3. **yikatong.r.java**:这可能是项目中定义的Java源代码文件,包含了使用JNative调用DLL的Java类。在这个文件中,开发者会定义本地方法签名,然后通过JNative API来实现具体的调用。 4. **jnative.dll**:这是一...
Java调用DLL的工具JNative是为了解决Java应用程序与本地动态链接库(DLL)交互问题而设计的一个开源组件。在传统的Java开发中,如果需要调用非Java编写的库,比如C或C++编译的DLL,通常会使用JNI(Java Native ...
总结来说,`JNative-1.3.2`是Java调用DLL和SO文件的利器,通过JNI接口,它消除了Java与本地代码之间的障碍,使得开发者可以灵活地利用已有的C/C++代码资源。正确理解和使用这个开源组件,能够极大地提升开发效率,...
在Java中调用DLL文件主要通过Java Native Interface (JNI)、JAWINJNative和JNA等技术来实现。这些技术允许Java程序与本地代码进行交互,从而实现对DLL文件的调用。 #### JNI (Java Native Interface) JNI是Java...
1、Labview生成Dll文件 2、Java通过Jnative第三方Jar包调用Labview生成的DLL文件 3、Java在Windows系统调用Labview生成的Dll的说明 有JNative的使用说明 直接下载,根据使用说明可以直接使用。
本示例以"Java调用DLL例子"为主题,使用了JNative库作为接口来实现Java调用本地动态链接库。 JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能...
以下是一个关于如何使用JNative调用DLL函数的实例,主要涉及到两个关键函数:`EncryptPswStr`和`DecryptPswStr`,以及一个辅助函数`NotifyReadMeter`。 1. **加密与解密函数**: - `EncryptPswStr`:该函数用于...
使用JNative调用DLL的基本流程: 1. **编写JNI头文件**:使用`javah`工具生成JNI头文件,该文件包含了C/C++函数原型,这些函数将作为Java和本地代码之间的桥梁。 2. **编写本地代码**:根据生成的头文件编写C/C++...
`TestJNative.java`很可能是使用JNative调用DLL的示例代码。 `jinvoke.jar`是另一个相关的库,它可能提供了一种更简便的Java本地调用方式,简化了JNI的使用。`TestJInvoke.java`可能展示了如何使用jinvoke来调用`...
以下是使用JNative调用DLL的Java代码示例: ```java package com.tvjody; import org.xvolks.jnative.JNative; import org.xvolks.jnative.Type; import org.xvolks.jnative.exceptions.NativeException; public ...
Java本地接口(JNI)是Java平台提供的一种原生方法调用机制,允许Java代码与用其他编程语言(如C++)编写的动态链接库(DLL)进行交互。在这个场景中,我们关注的是JNative,一个简化Java调用C/C++库的开源库。 ...
Java调用DLL(动态链接库)是Java编程中的一项高级技术,主要应用于Java与本地代码交互,例如在Java中利用C++或C编写的库。本文将详细介绍如何使用Java调用DLL以及所需的必备jar包。 首先,Java并不直接支持DLL的...