EzHotKey 板


LINE

嗯,看标题就觉得和版旨有点不符... 不过一来这是版主大人提的问题,所以应该不会被水桶 二来不管 AutoIt 或 AutoHotKey 都用的上类似的知识 尤其 DLL 配合 AutoIt 的 MemoryDll UDF 又特别的好用(又再卖瓜了) 所以还是简单写个教学好了 首先,需要的东西有: 1. 原始码(去找现成的或是自己写),这里用一个简单的 crc32 做范例 2. 可将原始码 compile 成 .obj 的 compiler 以下范列用的是 Dev-C++ with Mingw/GCC 3.4.2 3. Microsoft 的 linker,档名 link.exe,版本不要太新 找不到的人去 http://www.masm32.com/masmdl.htm 下载 MASM32 用 WinRAR 或 7-Zip 开启 install.exe,解出 link.exe 和 mspdb50.dll 即可 为什麽不用其它的 linker 呢?因为目前只有 MS 的 linker 吃 COFF 也吃 OMF 不过只限於旧版,新版的反而只吃 COFF 了,真是越做越退步 注: OMF 和 COFF 是两种不同的 obj 格式,如 MSVC、GCC 是用 COFF BCPP、Digital Mars C 用的是 OMF,不过 MS 的 linker 通吃就是了 好了,工具都备齐了,接下来看一下原始码,请看以下的 crc32.c 看的懂看不懂都没关系,闻香一下,反正只要会 compile 就好 另外还要帮 DLL 弄一个进入点,有需要的话可以做一些初始化的动作 不过目前就什麽事都不要做,直接传回 1 表示 ok 就好,请看 entry.c 开始 compile 吧,很简单,一行就好: \Dev-Cpp\bin\gcc -c -O crc32.c entry.c 这样 crc32.o 和 entry.o 两个 obj 档就跑出来了 接下来重头戏是 link,除了要指定 /dll 外,还要指明 /entry:DllEntryPoint 因为我们不是用标准的方式,所以 linker 会找不到预设的进入点,一定要指明才行 最後要加的就是提供给外部呼叫的函式名称,在这里只有一个 /export:CRC32 全部总合起来像这样: link crc32.obj entry.o /dll /entry:DllEntryPoint /export:CRC32 除了跑出 crc32.dll 外,连 crc32.lib 也很贴心的提供好了,不过我们用不到...杀吧 辛苦了这麽久,crc32.dll 终於做好了,赶快来测试看看(当然是用 AutoIt) 注意函式是用 C 语言写的,要用 cdecl 方式呼叫 $Ret=DllCall("crc32.dll","uint:cdecl","CRC32","str","123456789","int",9) MsgBox(0,'CRC32',Hex($Ret[0])) 显示结果:CBF43926 去 http://www.lammertbies.nl/comm/info/crc-calculation.html 对照一下 一模一样,成功!! 附带一提,如果不用 gcc,用其它 compiler 行吗?来试试 Digital Mars C 好了: \dm\bin\dmc -c -O crc32.c 成功!这时的 obj 档叫做 crc32.obj,试试 link: link crc32.obj entry.o /dll /entry:DllEntryPoint /export:CRC32 除了跑出 converting object format from OMF to COFF 讯息外,其它一切正常 测试结果也是 ok 的 为了服务到不用 gcc 或 compile 不出 entry.c 的人,这里提供 compile 好的 entry.o 按照上述的方式可配合自己爱用的 compiler 制作 DLL http://sharebee.com/651b891e (如果免空挂了,下面有 HEX 版本) 总而言之,不管原始码从哪里来的,只要能想办法 compile 成 obj 就能用 linker 制成可供 AutoIt 或 AutoHotKey 呼叫的 DLL 大幅提升了 Script 的弹性和扩充性喔! 以下是这个教学用到的档案内容,请自行 copy & paste // 档名: crc32.c // Prototypes of CRC32 functions // Made by Laszlo // Modify by Ward for DLL tutorial typedef unsigned long uint; void CRC32_Init(uint* table) { uint i, j, poly = 0xEDB88320, CRC; for(i = 0; i < 256; i++) { CRC = i; for(j = 0; j < 8; j++) if(CRC & 1) CRC = (CRC >> 1) ^ poly; else CRC >>= 1; table[i] = CRC; } } uint CRC32(unsigned char* buffer, uint len) { static uint table[256]; uint crc32val = -1; uint i; CRC32_Init(table); for (i = 0; i < len; i++) crc32val = table[(crc32val ^ buffer[i]) & 255] ^ (crc32val >> 8); return ~crc32val; } // 档名: entry.c __stdcall int DllEntryPoint(int hinstDLL, int fdwReason, int lpvReserved) { return 1; } // 档名: entry.zip,如果上面的免空挂了,想办法把以下 HEX 存成档案後解压吧 504B03041400000008003031873941CB79EAA00000006601000007000000656E747279 2E6F858F310AC2401045FF64B5911456D69E60414F90423B0B1B4BD1A8AB049608660B ED6C050B0FE0412CC5BB780D7536045C5D923CF8CCC0FC19E68F48C07265B5F2AE49D2 A8BDC19736EB8C5FBAC05CAE6213A39A08B8CB4596A18623FB26A7E78DB89F3E425C18 B94EB42AE6AF37B021959ADD412EFF761B4525FE2A20FFB69BC78E05859EC7CD12E41E FF8E9B4394783AACD940EBA1FD74BC4D5213F5FAF800504B0102140014000000080030 31873941CB79EAA000000066010000070000000000000000002000000000000000656E 7472792E6F504B0506000000000100010035000000C50000000000 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.4.44 ※ 编辑: ward 来自: 125.225.4.44 (12/07 06:46)
1F:推 VElysian:太专业了~~~~ 这个学校应该学不到吧!!! @@ 12/08 09:14
2F:推 moonls:有看有推~~ ^^ 12/09 01:07







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP