Тема: AHK: Подружить DllCall и SendMessage
Имеется скрипт с использованием библиотеки AHKCtrlSupport.dll для создания в окне GUI дополнительных контролов.
Встроен обработчик событий для этих контролов:
OnMessage(0x002B, "ProcessMsg")
OnMessage(0x000F, "ProcessMsg")
OnMessage(0x000B, "ProcessMsg")
OnMessage(0x0400, "ProcessMsg")
ProcessMsg(wp, lp, msg)
{
;ToolTip, Msg:%msg% - lp:%lp% - wp:%wp%
nRC := DllCall("AHKCtrlSupport\ProcessMsg", int, msg, int, wp, int, lp, "Cdecl Int")
if (errorlevel <> 0) || (nRC = 0)
{
MsgBox ошибка вызова ProcessMsg Errorlevel: %errorlevel% - RC: %nRC%
return
}
}
Работает великолепно до тех пор, пока в том же скрипте не начинаю использовать команду
SendMessage,0xB0,&Start,&End,,ahk_id %MyEditID%
К слову, команда используется для стандартного контрола, но суть в другом.
Последовательное выполнение (по ходу действия) сначала этой команды, затем обработчика вызывает ошибку
Error: This DllCall requires a prior VarSetCapacity. The program is now unstable and will exit.
Line#
117: MsgBox,ошибка вызова CreateHTMLStatic Errorlevel: %errorlevel% - RC: %LEDStaticHWND%
118: Return
119: }
130: nRC := DllCall("AHKCtrlSupport\Redraw", "Cdecl Int")
131: Return
134: {
135: VarSetCapacity(lp, 10240000)
---> 137: nRC := DllCall("AHKCtrlSupport\ProcessMsg", int, msg, int, wp, int, lp, "Cdecl Int")
138: if (errorlevel <> 0) || (nRC = 0)
139: {
140: MsgBox,ошибка вызова ProcessMsg Errorlevel: %errorlevel% - RC: %nRC%
141: Return
142: }
143: }
145: Return
---------------------------
ОК
---------------------------
Вот с чем с чем, а с командой VarSetCapacity не дружу. Как ее тут правильно выставить, чтобы программа не материлась?
Варианты уже попробовал разные - не вытанцовывается.