Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Версия AutoIt должна быть 3.3.8.1 и выше
Код:
Global $tagInterface = 'MessageBox int(uint;wstr;wstr);' & _
'ToolTip void(wstr;int;int);'
Global $a__Methods[2] = [DllCallbackRegister('Test__MsgBox','int','ptr;uint;wstr;wstr'), _
DllCallbackRegister('Test__ToolTip','none','ptr;wstr;int;int')]
Func Test()
Local $a__Result[2], $i__Number = UBound($a__Methods)
If ($i__Number > 0) Then
$a__Result[1] = DllStructCreate('ptr VTable;ulong_ptr Number;ptr Method[' & $i__Number & ']')
DllStructSetData($a__Result[1], 'VTable', DllStructGetPtr($a__Result[1], 'Method'))
DllStructSetData($a__Result[1], 'Number', $i__Number)
For $i = 1 To $i__Number
DllStructSetData($a__Result[1], 'Method', DllCallbackGetPtr($a__Methods[$i - 1]), $i)
Next
$a__Result[0] = ObjCreateInterface(DllStructGetPtr($a__Result[1]), '', $tagInterface, False)
If IsObj($a__Result[0]) Then
Return $a__Result
EndIf
EndIf
Return 0
EndFunc
Func Test__MsgBox($p_This, $i_Flag, $s_Title, $s_Text)
Return MsgBox($i_Flag, $s_Title, $s_Text)
EndFunc
Func Test__ToolTip($p_This, $s_Text, $i_Left, $i_Top)
ToolTip($s_Text, $i_Left, $i_Top)
EndFunc
Func Destroy($o__Object)
If (IsArray($o__Object) And (Ubound($o__Object) >= 2)) Then
$o__Object[0] = 0
$o__Object[1] = 0
For $i = 0 To UBound($a__Methods) - 1
DllCallbackFree($a__Methods[$i])
Next
EndIf
EndFunc
$oTest = Test()
$oTest[0].MessageBox(32, 'Title', 'Text')
$oTest[0].ToolTip('AutoIt v3 - это язык для написания сценариев, напоминающий BASIC и предназначенный для автоматизации Windows GUI', 20, 20)
Sleep(5000)
$oTest[0].ToolTip('', 0, 0)
Destroy($oTest)