DynaCall

内置函数,类似于 DllCall,但适用于 DllCall 结构并使用对象语法。它通常比 DllCall 更快,更易于使用,并且节省了大量的打字和代码。

OutputVar := DynaCall("DllFile\Function", "ParameterDefinition", Default1, Default2, Default3, ...)
函数示例: TrueSleep := DynaCall("kernel32\Sleep", "ui", 100)
调用函数: TrueSleep[1000], %TrueSleep%(1000)

参数

OutputVar(输出变量)

存储用于调用 dll 函数的 DynaCall 对象的变量的名称。

[DllFile\]Function([DLL 文件\]函数)

DLL 或 EXE 文件名,后跟反斜杠和函数名称。例如:“MyDLL\MyFunction”(“.dll”是默认值,可以省略)。如果没有指定绝对路径, DllFile 假定位于系统的 PATH 或 A_WorkingDir 中。

DllFile 当调用驻留在 User32.dll、Kernel32.dll、ComCtl32.dll 或 Gdi32.dll 中的函数时,可以省略。例如,“User32\IsWindowVisible”产生与“IsWindowVisible”相同的结果。

如果通过给定名称找不到函数,则会自动附加“W”(Unicode) 后缀。例如,“MessageBox”与“MessageBoxW”相同。

该参数也可以仅包含一个整数,它被解释为要调用的函数的地址。此类地址的来源包括 COM 和 Callback。

ParameterDefinition(参数定义)

对于定义,您需要使用 DllCall 类型的简短版本。

DllCall DynaCall 等效类型
Inti
Strs
AStra
WStrw
Shorth
Charc
Floatf
Doubled
PTRt
Int64i6
CDecl 使用 == 而不是 =,例如“t==uis”。
U 前缀以及 * 或 p 这也受支持,例如:“ui=ui*s”、“ui=uips”

参数定义的语法为 [返回类型 =[=]    ]   参数类型 参数类型 参数类型   ...
参数之间可以有任意数量的空格或制表符,这些将被忽略。

更改参数顺序

Default Value(默认值)

在函数调用中省略参数时使用的默认值。
请注意,这始终使用 ParameterDefinition 中指定的原始参数顺序。

备注

Base__Class 是属性,不能使用它们作为点 (.) 语法的参数来调用 DynaCall,而是使用 MyDynaCall["base"] 语法!

示例

AHKCMD:=DynaCall("SendMessage", ["t=tuitt", 3], A_ScriptHwnd, 0x111) ; 定义一个 DynaCall 对象。
AHKCMD[ 65305 ] ; 调用实际函数
AHKCMD.65305
%AHKCMD%(65305)

相关

#DllImport, WinApi