XREA.COM Logo XREA.COM Ad

管理人の雑記

31管理人 ★:2007/03/11(日) 06:04:43
1.0.46.08でDllCallに関数のアドレスを渡せるようになったので試してみた。
COMインターフェイスを取得してメソッドを呼び出す(http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1157529465/89)時などに必要な機能だが、COMについて調べるのは面倒なので、とりあえず普通の関数呼び出しをアドレス経由で行ってみることに。
hM:=DllCall("LoadLibrary",Str,"msvcrt.dll",UInt)
hP:=DllCall("GetProcAddress",UInt,hM,Str,"_mbslwr",UInt)
SetBatchLines,-1
tc:=A_TickCount
Loop,100000
{
DllCall(hP,Str,"A",Str)
; DllCall("msvcrt.dll\_mbslwr",Str,"A",Str)
}

MsgBox,% A_TickCount-tc

アドレス経由で呼び出した場合、1100ミリ秒、名前指定で呼び出した場合1450ミリ秒と、若干速くなっているようである。
あまり時間のかからない処理を行う関数を何回も呼び出す場合などは、高速化に役立つかも知れない。

また、普通にDllCallを呼び出すと、AutoHotkeyが勝手にDLLを解放してしまい、DLLが生成したハンドルなどが無効になってしまうので、従来はLoadLibraryしてからDllCallしていたが、このような場合はせっかくだからアドレス経由で呼び出すといいかもしれない。
101KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08