作者ward (蹲在人面狮身像里)
看板EzHotKey
标题[-AI-] UDF 推荐 - MemoryDll (将 DLL 嵌入 Script 中)
时间Sat Dec 6 21:52:24 2008
看版面太冷清了,推荐一些 AutoIt 的 UDF 来炒热气氛好了
首先介绍的是一个很神奇的 UDF - MemoryDll.au3
当然这是老王卖瓜啦,因为这个 UDF 我自己写的 :p
它最主要的功能就是将 DLL 以 HEX 格式嵌入 Script 中!
AutoIt 简单又好用,但要写大程式时,速度却是个大问题
幸好 AutoIt 可用内建的 DllCall 功能呼叫 DLL 函式
这样既可减少重新制造轮子的辛苦,又可大幅提升 Script 执行的速度
但 DLL 还是有麻烦的地方,很多人喜欢用单纯的 Pure Script 来做事
这样 Compile 成执行档後也只有单一档案,简单又方便
比如 MD5 好了,虽已有现成的 DLL,但还是有人大费周章写出 Script 的版本
可惜试用过後大概会直接删掉吧,因为实在是太慢了
曾经有人提出过一个用 AutoIt 直接跑 machine code 的做法
简单说就是让 AutoIt 去执行 HEX 格式的 machine code,这样速度超快
我也花了不少时间研究此一做法,写了一些 machine code 版本的 UDF
可惜执行速度快是快了,但要弄出 AutoIt 可以跑的 machine code 却是累的很
难道没有又快又简单,还可以做成单一执行档的方法了吗?
後来突然想到,曾在网路上看过将 DLL 嵌入执行档的做法
如果用此方式配合 AutoIt 的 machine code 技巧,岂不完美!
经过一番努力,可直接将 DLL 嵌入 Script 的 UDF - MemoryDll 就诞生啦
使用方法已经很贴心的设计成和内建的 DllCall 一模一样
只要将 DllCall 改成 MemoryDllCall,DLL 名称改成 DLL 的 HEX 字串即可
MemoryDll 优点
1. 可用 C、Basic、ASM 等语言写 DLL,配合 MemoryDll 执行,就和 Pure Script 一样
2. 嵌入 Script 的 DLL 直接在记忆体中执行,比 SQLite 那种生成暂存档式的做法高尚
3. 市面上的 DLL 理论上也都可以用,不过还是要测试看看才能确定
MemoryDll 缺点
1. 档案大些(因为是用 HEX 格式储存 DLL)
2. 比直接呼叫硬碟中的 DLL 慢(因为要用 HEX 转换成 code,不过通常是感觉不出来)
参考资料
UDF下载(直接连结我在 AutoIt 论坛 PO 的文)
http://www.autoitscript.com/forum/index.php?showtopic=77463
技术来源 - Joachim Bauch's 的教学和原始码
http://www.joachim-bauch.de/tutorials/load_dll_memory.html
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.4.44
1F:推 VElysian:好厉害喔~~ 可以请问写 DDL 需要哪些背景知识吗??? 12/06 22:44
2F:推 alex2202:推 12/07 00:13
3F:推 Kenqr:好强!推! 12/07 01:12
4F:推 scsnake:推一下ward大@@ 12/07 07:47
5F:推 moonls:有看有推 12/09 01:05
6F:推 Kalashnikov:这script好专业阿= = 12/18 13:01