bitgao 发表于 2012-5-21 23:34:28

DllCall调用引起崩溃问题[已解决]

本帖最后由 bitgao 于 2012-5-22 14:39 编辑

脚本如下:
WinActivate("无标题 - 记事本")
$dll1 = DllCall("UserDll.dll","Long","Init","long",58692104)
$dll2 = DllCall("UserDll.dll","Long","KeyPress","Long",65,"Long",10)
$dll3 = DllCall("UserDll.dll","void","End")

调用的三句函数的格式分别为:
long _stdcall Init(long Data)
long _stdcall KeyPress(long VirtualKeyCode, long Count)
long _stdcall End(void)

第一句DllCall返回值不正常,第二句DllCall调用崩溃。
一直找不到原因,请教高手。谢谢!

bitgao 发表于 2012-5-22 14:35:34

本帖最后由 bitgao 于 2012-5-22 14:37 编辑

搞清楚了,原来是因为调用之后没有DllClose,导致下一次运行的时候脚本崩溃。

应该这样写:
WinActivate("无标题 - 记事本")
$dll = DllOpen("UserDll.dll")
$dll1 = DllCall("UserDll.dll","Long","Init","long",58692104)
$dll2 = DllCall("UserDll.dll","Long","KeyPress","Long",65,"Long",10)
$dll3 = DllCall("UserDll.dll","void","End")
DllClose($dll)

bitgao 发表于 2012-5-22 14:36:38

本帖最后由 bitgao 于 2012-5-22 14:38 编辑

DllClose
--------------------------------------------------------------------------------
关闭此前打开过的DLL文件。

DllClose ( dll句柄 )

参数
dll句柄 目标 DLL 的句柄,可由此前调用 DllOpen 函数的返回值获得。
返回值


注意

若给定的 dll句柄 无效则 AutoIt 将抛出一个运行时错误,并且脚本程序将终止!
在脚本程序终止运行时,AutoIt 会自动关闭所有由脚本打开的 DLL 文件;当然了,显式调用 DllClose 函数来关闭 DLL 文件始终是推荐方式。
页: [1]
查看完整版本: DllCall调用引起崩溃问题[已解决]