利用jawin完成调用window中dll的调用
来源:互联网 发布:淘宝网品牌女鞋kasscat 编辑:程序博客网 时间:2024/05/16 15:49
1、下载jawin:http://jawinproject.sourceforge.net/。
2、配置:
》将jawin.jar放于%JAVA_HOME%/jre/lib/ext下 。
》将jawin.dll放于c:/winnt/system32下。否则将出现错误:COMException : no jawin in java.library.path;
也可将jawin.dll放于每个项目目录下。
》至此在Editplus中调试Jawin/NJawin的例子,可以通过。 而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path。
》在Eclipse中,菜单->window->preference->Java->installed JREs 将原来的remove,重新建一个指到你的java sdk目录。
》 ok了。
3、程序测试:
- import org.jawin.funcptr;
- import org.jawin.returnflags;
- public class createppt {
- public static void main(string[] args) {
- try {
- funcptr msgbox = new funcptr("user32.dll", "messageboxw"); //获得函数指针
- msgbox.invoke(0, "hello from a dll", "from jawin", 0, returnflags.fail_on_false);
- /*1. 指令字符串。一个"XXX:Y:ZZZ"格式的字符串。其含义分别是传入参数中的每个字节的数据类型意义、返回值的类型、需要从传入指针中读取的数据(inout类型参数)。比如:
- 函数签名int func(int, int, struct s*, char*); //其中struct s*调用完函数后需要读出,struct s所占字节数为16。
- 其指令字符串为:IIP16G:I:L4L4n16L4。该字符串在解析返回值(字节数组)时,首先应该是返回类型I对应的4个字节,然后是inout类型的参数中n16对应的16个字节。
- 其中字符串的意义可以在Jawin提供的文件instructions.h中找到,或者在官方文档(Jawin数据指令)中找到常用的一些指令字符串的意义。
- 2. 传入参数的总字节大小。
- 3. 前面写好的传入参数的原始字节流。
- 4. 一个object数组。
- 5. ReturnFlags,用以根据C/C++返回值将C/C++的错误转换为Java的异常并抛出。其中CHECK_NONE表示不检查;CHECK_FALSE和CHECK_WIN32分别表示返回0是FALSE和SUCCESS,根据是否出错决定是否抛出异常;CHECK_HRESULT表示使用COM模型中的HRESULT作为返回值,其错误码可以配置。
- */
- } catch (exception e) {
- e.printstacktrace();
- }
Jawin的使用步骤:
1.环境配置:下载Jawin;Jawin.dll放入工程目录下;Jawin.jar相关jar文件加入到运行库中(LibPath或者Eclipse下配置工程的BuildPath-AddLibrary)。
2.获得函数指针:new FuncPtr("DllFileName.DLL", "dllFunctionName");
3.用LittleEndianOutputStream将函数需要的参数写入到一个原始字节流NakedByteStream。
4.最重要的一步:调用FuncPtr.invoke()。传入参数比较复杂。
5.解析上一步的返回值(字节数组)。
第4步中传入的参数包括:
1.指令字符串。一个"XXX:Y:ZZZ"格式的字符串。其含义分别是传入参数中的每个字节的数据类型意义、返回值的类型、需要从传入指针中读取的数据(inout类型参数)。比如:
函数签名int func(int, int, struct s*, char*); //其中struct s*调用完函数后需要读出,struct s所占字节数为16。
其指令字符串为:IIP16G:I:L4L4n16L4。该字符串在解析返回值(字节数组)时,首先应该是返回类型I对应的4个字节,然后是inout类型的参数中n16对应的16个字节。
其中字符串的意义可以在Jawin提供的文件instructions.h中找到,或者在官方文档(Jawin数据指令)中找到常用的一些指令字符串的意义。
2.传入参数的总字节大小。
3.前面写好的传入参数的原始字节流。
4.一个object数组。
5.ReturnFlags,用以根据C/C++返回值将C/C++的错误转换为Java的异常并抛出。其中CHECK_NONE表示不检查;CHECK_FALSE和CHECK_WIN32分别表示返回0是FALSE和SUCCESS,根据是否出错决定是否抛出异常;CHECK_HRESULT表示使用COM模型中的HRESULT作为返回值,其错误码可以配置。
使用Jawin的缺点:不方便调试,几乎所有的错误都抛出同样的异常COMException;需要对数据类型的转换比较了解;不能跨平台,对Windows的依赖性比较强。
使用Jawin的优点:方便使用,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。
- 利用jawin完成调用window中dll的调用
- 利用jawin完成调用window中dll的调用
- 利用jawin完成调用window中dll的调用
- 一个简单示例:利用jawin完成调用window中dll的调用
- 利用jawin完成調用window中dll的調用[轉載]
- jawin如果调用dll
- Jawin –Java/Win32互动项目:可调用DLL及COM的调用项目
- [转]Java调用DLL动态链接库的方案:JNI, Jawin, Jacob.
- java调用dll的几种方法(JNI,Jawin,Jacob)
- java调用dll的几种方法(JNI,Jawin,Jacob)
- 通过 jawin 调用dll库(no jawin in java.library.path)
- 在java中使用Jawin组件访问Windows下的COM组件 java调用ole
- Java调用本地库,如调用DLL或者SO,如:JNI, Jawin, Jacob,JNative,JNA
- 利用vc调用dll
- 利用jni调用c的dll
- VC中DLL的调用
- PowerBuilder中dll的调用
- Window输出窗口运行时调试信息中没有显示调用的dll情况
- RAW SOCKET有的计算机上抓不到本机发的包
- Asp模版类
- November 12th Thursday
- Item定义
- 上传图片预览(firefox,IE6,IE7+)
- 利用jawin完成调用window中dll的调用
- email发出去同一域的收不到的奇怪问题的解决思路和处理方法
- 用下拉菜单跳转页面
- 什么是信噪比 S/N 、载噪比 C/N 与 Eb/N0 ?
- sql(left join,right jion,inner join)连接详解
- linux怎么念?
- oralce 的3种标准角色
- 以太网环境下UDP传输中的数据包长度问题
- Request.ServerVariables 全部参数详解