- 浏览: 263354 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
小清新雪仔_:
报错The import org.springframewor ...
Spring Security oAuth学习之Hello World -
hrybird:
http://www.dolit.cn/portfolios/ ...
LightVOD P2P点播系统完全开源 -
xiaoxiao_qiang:
感谢,正在学习oAuth,有机会一起交流
Spring Security oAuth学习之Hello World -
thinkgem:
你好,lightvodcode.zip现在不能下了,能否发我一 ...
LightVOD P2P点播系统完全开源 -
gdw520:
<div style="text-align: ...
如何实现javascript截图 jQuery插件imgAreaSelect使用详解
一.在程序用jnative调用window的dll
1. 安装
http://sourceforge.net/projects/jnative
解压后得到3个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar,其中:
JNativeCpp.dll 放在windows/system32目录下
libJNativeCpp.so linux下使用
JNative.jar 导入工程中
2. 使用
2.1. 加载dll文件
JNative可使用两种方式加载dll文件:
a.使用System.loadLibrary加载,使用此方法可加载系统目录中的dll文件。
b.可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。使用System.load加载,此方法参数为dll文件全路径名。
2.2. 调用函数
a、首先创建JNative对象:
JNative jnative = new JNative(dll文件名, 函数名);
b、设置返回值类型:
jnative.setRetVal(Type.INT);
c、设置参数
jnative.setParameter(0, Type.STRING, …); //设置第一个参数为字符串
jnative.setParameter(1, Type.INT, String.valueof(…)); //设置第二个参数为整数
d、执行
n.invoke();
e、获取返回值
Integer.parseInt(jnative.getRetVal());
3.实例
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.HeapMemoryBlock;
public class Test {
public static void main(String[] args) throws NativeException, IllegalAccessException {
JNative v=new JNative("Kernel32.dll","GetModuleFileNameA");
int i = 0;
v.setRetVal(Type.INT);
Pointer pName = new Pointer(new HeapMemoryBlock(1024));
v.setParameter(i++, 0);//module handle
v.setParameter(i++, pName);//pFileName
v.setParameter(i++, 1024);//nSize
v.setRetVal(Type.INT);
v.invoke();
int ret = Integer.parseInt(v.getRetVal());
if (ret == 0) {
// return "null";
System.err.println(
"GetModuleFileName failed!");
} else {
String path = pName.getAsString().substring(0,
ret);
pName.dispose();
v.dispose();
System.out.println("current process's path is:"+path);
}
}
}
4.注意:
在JNative中用了JDK1.5的一些特性,如枚举、静态引入等,所以在JDK1.4下是不能用的。
二.在程序用jawin调用window的dll
jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便。
下面是我们作的一个测试,很顺利便通过了。
1、下载jawin:http://jawinproject.sourceforge.net/。
2、配置:
a.将jawin.jar放于%JAVA_HOME%"jre"lib"ext下。
b.将jawin.dll放于c:"winnt"system32下。否则将出现错误:COMException : no jawin in java.library.path;
也可将jawin.dll放于每个项目目录下。
c.至此在Editplus中调试Jawin/NJawin的例子,可以通过。而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path。
d.在Eclipse中,菜单->window->preference->Java->installed JREs 将原来的remove,重新建一个指到你的java sdk目录。 ok了。
3、程序测试:
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;
public class GfJawinTest {
public static void main(String[] args) {
try {
FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");
msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.利用jawin调用com组件, 如word:
//创建word
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class CreateWord {
public static void main(String[] args) {
try {
Ole32.CoInitialize();// 初始化
DispatchPtr app = new DispatchPtr("Word.Application");// 创建word对象
app.put("Visible",true); // 使word可见
DispatchPtr docs=(DispatchPtr)app.get("Documents"); // 获得document对象集合
DispatchPtr doc=(DispatchPtr)docs.invoke("Add"); // 新增一个文档
app.invoke("Activate"); // 激活当前文档
DispatchPtr objTextFont=(DispatchPtr)((DispatchPtr)doc.get("Content")).get("Font");
// 取得Font对象
objTextFont.put("Name","黑体");
// 设置字体
objTextFont.put("Size","48");
// 设置字号
DispatchPtr docSelection=(DispatchPtr)app.get("Selection");
// 取得Selection对象
docSelection.invoke("TypeText","Jawwintesttext!"nJawin测试文本。");
// 使用TypeText方法添加文本
doc.invoke("SaveAs","d:""jawintest.doc");
// 保存文档(保存在C盘根目录下)
doc.invoke("Close");
// 关闭当前文档,去掉前面的注释符并重新编译后可生效
app.invoke("Quit");
// 退出Word,去掉前面的注释符并重新编译后可生效
Ole32.CoUninitialize(); // 释放对象
} catch (Exception e) {
e.printStackTrace();
}
}
}
//打开word
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class OpenWord {
public static void main(String[] args) {
try {
Ole32.CoInitialize();
DispatchPtr app = new DispatchPtr("Word.Application");
app.put("Visible", true);
DispatchPtr docs = (DispatchPtr) app.get("Documents");
DispatchPtr doc = (DispatchPtr) docs.invoke("Open", "d:""word.doc");
Ole32.CoUninitialize();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//调用word中的另存为,保存为.html
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class Word2Html {
public static void main(String[] args) {
String path = "e://17001939578.doc";
int iPos = path.lastIndexOf(".");
String fileExtName = path.substring(iPos + 1);
String fileMainName = path.substring(0, iPos);
fileExtName = fileExtName.toLowerCase();
try {
Ole32.CoInitialize();
// 初始化
DispatchPtr app = new DispatchPtr("Word.Application");
// 创建word对象
app.put("Visible", false);
// 设置word不可见
DispatchPtr docs = (DispatchPtr) app.get("Documents");
// 取得Documents对象
DispatchPtr doc = (DispatchPtr) docs.invoke("Open", path);
// 打开指定的word文件
doc.invoke("SaveAs", fileMainName + ".html");
// 另存为HTML文件
app.invoke("quit");
// 关闭word
Ole32.CoUninitialize();
// 释放对象
System.out.println(""n转换完成!");
System.out.println(""n文件名:" + fileMainName + ".html");
} catch (Exception e) {
System.out.println(""n该文件不存在!或者其他错误(如:运行环境问题)!");
}
}
}
1. 安装
http://sourceforge.net/projects/jnative
解压后得到3个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar,其中:
JNativeCpp.dll 放在windows/system32目录下
libJNativeCpp.so linux下使用
JNative.jar 导入工程中
2. 使用
2.1. 加载dll文件
JNative可使用两种方式加载dll文件:
a.使用System.loadLibrary加载,使用此方法可加载系统目录中的dll文件。
b.可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。使用System.load加载,此方法参数为dll文件全路径名。
2.2. 调用函数
a、首先创建JNative对象:
JNative jnative = new JNative(dll文件名, 函数名);
b、设置返回值类型:
jnative.setRetVal(Type.INT);
c、设置参数
jnative.setParameter(0, Type.STRING, …); //设置第一个参数为字符串
jnative.setParameter(1, Type.INT, String.valueof(…)); //设置第二个参数为整数
d、执行
n.invoke();
e、获取返回值
Integer.parseInt(jnative.getRetVal());
3.实例
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.HeapMemoryBlock;
public class Test {
public static void main(String[] args) throws NativeException, IllegalAccessException {
JNative v=new JNative("Kernel32.dll","GetModuleFileNameA");
int i = 0;
v.setRetVal(Type.INT);
Pointer pName = new Pointer(new HeapMemoryBlock(1024));
v.setParameter(i++, 0);//module handle
v.setParameter(i++, pName);//pFileName
v.setParameter(i++, 1024);//nSize
v.setRetVal(Type.INT);
v.invoke();
int ret = Integer.parseInt(v.getRetVal());
if (ret == 0) {
// return "null";
System.err.println(
"GetModuleFileName failed!");
} else {
String path = pName.getAsString().substring(0,
ret);
pName.dispose();
v.dispose();
System.out.println("current process's path is:"+path);
}
}
}
4.注意:
在JNative中用了JDK1.5的一些特性,如枚举、静态引入等,所以在JDK1.4下是不能用的。
二.在程序用jawin调用window的dll
jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便。
下面是我们作的一个测试,很顺利便通过了。
1、下载jawin:http://jawinproject.sourceforge.net/。
2、配置:
a.将jawin.jar放于%JAVA_HOME%"jre"lib"ext下。
b.将jawin.dll放于c:"winnt"system32下。否则将出现错误:COMException : no jawin in java.library.path;
也可将jawin.dll放于每个项目目录下。
c.至此在Editplus中调试Jawin/NJawin的例子,可以通过。而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path。
d.在Eclipse中,菜单->window->preference->Java->installed JREs 将原来的remove,重新建一个指到你的java sdk目录。 ok了。
3、程序测试:
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;
public class GfJawinTest {
public static void main(String[] args) {
try {
FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");
msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.利用jawin调用com组件, 如word:
//创建word
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class CreateWord {
public static void main(String[] args) {
try {
Ole32.CoInitialize();// 初始化
DispatchPtr app = new DispatchPtr("Word.Application");// 创建word对象
app.put("Visible",true); // 使word可见
DispatchPtr docs=(DispatchPtr)app.get("Documents"); // 获得document对象集合
DispatchPtr doc=(DispatchPtr)docs.invoke("Add"); // 新增一个文档
app.invoke("Activate"); // 激活当前文档
DispatchPtr objTextFont=(DispatchPtr)((DispatchPtr)doc.get("Content")).get("Font");
// 取得Font对象
objTextFont.put("Name","黑体");
// 设置字体
objTextFont.put("Size","48");
// 设置字号
DispatchPtr docSelection=(DispatchPtr)app.get("Selection");
// 取得Selection对象
docSelection.invoke("TypeText","Jawwintesttext!"nJawin测试文本。");
// 使用TypeText方法添加文本
doc.invoke("SaveAs","d:""jawintest.doc");
// 保存文档(保存在C盘根目录下)
doc.invoke("Close");
// 关闭当前文档,去掉前面的注释符并重新编译后可生效
app.invoke("Quit");
// 退出Word,去掉前面的注释符并重新编译后可生效
Ole32.CoUninitialize(); // 释放对象
} catch (Exception e) {
e.printStackTrace();
}
}
}
//打开word
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class OpenWord {
public static void main(String[] args) {
try {
Ole32.CoInitialize();
DispatchPtr app = new DispatchPtr("Word.Application");
app.put("Visible", true);
DispatchPtr docs = (DispatchPtr) app.get("Documents");
DispatchPtr doc = (DispatchPtr) docs.invoke("Open", "d:""word.doc");
Ole32.CoUninitialize();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//调用word中的另存为,保存为.html
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class Word2Html {
public static void main(String[] args) {
String path = "e://17001939578.doc";
int iPos = path.lastIndexOf(".");
String fileExtName = path.substring(iPos + 1);
String fileMainName = path.substring(0, iPos);
fileExtName = fileExtName.toLowerCase();
try {
Ole32.CoInitialize();
// 初始化
DispatchPtr app = new DispatchPtr("Word.Application");
// 创建word对象
app.put("Visible", false);
// 设置word不可见
DispatchPtr docs = (DispatchPtr) app.get("Documents");
// 取得Documents对象
DispatchPtr doc = (DispatchPtr) docs.invoke("Open", path);
// 打开指定的word文件
doc.invoke("SaveAs", fileMainName + ".html");
// 另存为HTML文件
app.invoke("quit");
// 关闭word
Ole32.CoUninitialize();
// 释放对象
System.out.println(""n转换完成!");
System.out.println(""n文件名:" + fileMainName + ".html");
} catch (Exception e) {
System.out.println(""n该文件不存在!或者其他错误(如:运行环境问题)!");
}
}
}
发表评论
-
【工具】ANT的安装和配置(windows)
2011-08-16 13:07 9801、下载:到ANT官方网站http://ant.apache. ... -
使用Axis开发Web Service程序
2011-06-16 08:32 865今天差点又要在公司加 ... -
flowplayer的破解
2011-04-24 13:53 9288这些天作视频项目时用到了开源的flowplayer,再网上下了 ... -
网站开发流程-WEB开发的流程
2011-04-21 08:18 11391. web开发流程概括 1.) ... -
Java调用linux命令ffmpeg视频转码
2011-04-01 17:54 1949Java调用linux命令ffmpeg视频转码 java.i ... -
FFmpeg linux下標准安裝 及 web使用
2011-04-01 17:53 36051,下載LAME(Lame Aint an MP3 Encod ... -
安装和使用ffmpeg转换视频为flv文件(windows和linux)
2011-04-01 17:49 2090安装和使用ffmpeg转换视频为flv文件(windows和l ... -
java处理日期时间 相加减
2011-02-28 16:33 957JAVA处理日期时间常用方法: 1.java.util.C ... -
java随机生成十六进制颜色
2010-12-17 09:02 7589/** * 获取十六进制的颜色代码.例如 &qu ... -
java保留小数位问题
2010-12-08 16:07 2137java保留两位小数问题: 补充 (double)(Ma ... -
要和.net进行一次交互HTTPt发过来的XML格式
2010-08-13 15:05 1082今天干活时有个需求,要和.net进行一次交互,想在Struts ... -
LightVOD P2P点播系统完全开源
2010-06-21 09:55 6375http://www.lightvod.com 源码下载及配 ... -
排序复习
2010-03-10 16:33 804package algorithms; /** * @a ... -
The content of element type "web-app" must match解决
2010-01-26 12:46 1863The content of element type &qu ... -
JAVA错误处理大集合
2009-12-23 15:29 17500、 需要标识符 a) 不在函数内 1、 非法表达式开始 b) ... -
飞信API(fetionlib)--发送短信
2009-12-03 10:39 2839package com.test; import java. ...
相关推荐
在实际项目中,Java调用DLL通常用于利用已有的C/C++库,或者执行一些Java不擅长的任务,如硬件控制、图形处理等。然而,由于涉及到本地代码,这也会增加程序的复杂性和维护难度,因此在选择这种方法时需要权衡利弊。...
Java调用DLL是Java开发中一个重要的技术主题,它允许Java程序与本地操作系统API或者其他C/C++编写的动态链接库进行交互。在Java中,有多种方法可以实现这个功能,其中最常用的是Java Native Interface (JNA) 和 ...
总结来说,Java调用DLL文件主要依赖于JNative库,通过定义Java接口、加载DLL、获取函数句柄、创建代理对象以及调用函数等步骤实现。这种方法使得Java开发者能够充分利用C/C++库的功能,同时也保持了Java的跨平台特性...
总的来说,通过Java调用DLL实现DES加密解密涉及了Java和C/C++的混合编程,需要理解JNI的工作原理,以及如何在C/C++中与DLL交互。这个过程对于那些希望在Java中利用已有的本地库功能的开发者来说是至关重要的。
总结来说,Java调用DLL主要涉及JNI的使用,包括在Java中声明native方法,生成JNI头文件,编写C++代码实现接口,编译链接DLL,以及在Java中加载和调用DLL。这个过程允许Java开发者充分利用C++的高性能特性,同时保持...
### JAVA调用DLL方法 在跨平台开发领域中,Java作为一种强大的编程语言,因其具有良好的移植性和跨平台性而被广泛使用。然而,在某些特定情况下,我们可能需要调用本地库(例如DLL文件)来实现特定功能或提高性能。...