yesry 通过桥接器,Java调用任何API或DLL

大家知道,Java调用DLL有个特别的地方,就是DLL的输出函数需要特别的名字:
JNIEXPORT void JNICALL Java_类名_函数名
  (JNIEnv *, jclass, 其他参数)

{

}

总是要求DLL函数有 Java_ 开头,调用USER32.DLL中的 GetWindowText 那要怎么做呢?直接调用是不可能的了,下面介绍通过桥接器,实现Java调用任何API,或者类似API的任何DLL的方法。

 

先看运行效果:

这是把 JFrame 通过 API 中的 SetWindowRgn 函数改变成圆角窗口。

这个桥接器的准备工作可以参考VC写的源代码。这里主要介绍的是Java部分的代码:

1 API 部分

2 应用实现部分

 

桥接器的2个重要的类分别是 OSAPIApiParamsOSAPI 负责API的调用实现,ApiParams 负责参数组织。OSAPI 的 CallOSAPI 方法 第一个参数是DLL文件名,像上述的USER32.DLL,第二个参数是方法的名字,要注意的是,Windows API 很多是区分 ANSI 和 Unicode ,就像我们熟悉的GetWindowText() 就分别有GetWindowTextA() GetWindowTextW() 两个对应于 ANSI 和 Unicode ,第三个参数是API的参数。ApiParams 的方法有很多,都是支持各种类型参数用的,例如 AppendUnsignedLong() 方法支持 DWORD 类型,AppendHandlePointer() 支持各种句柄。ApiParams还可以嵌套,用 AppendStructurePointer() 方法支持嵌套结构体指针,用 AppendStructure()  方法支持嵌套结构体,等等。

点击这里仅下载本例代码,下载后的.dwidget改名.zip文件解压即可

点击这里下载整个运行程序

点击这里下载这个IE内核浏览器源代码(不含msscript.ocx调用机制部分源代码,这部分是DLL形式提供的)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值