Тема: AHK: Functions cannot contain functions
Здравствуйте, уважаемые программисты. Год назад использовал некоторый набор скриптов, после чего взял перерыв на год, а сейчас решил вернуться к своей деятельности. Все скрипты были забэкапены в облаке, откуда были скачаны сейчас (т.е. код скриптов никак не поменялся). Проблема следующая: при попытке запустить скрипт, выдается ошибка в скрипте, который инклудится в основной скрипт: "Functions cannot contain functions." (напомню что этот скрипт работал ранее). При попытке отключить проблемную функцию, ошибка вылезала на следующей функции, потом на следующей и так далее. При попытке закомментировать все внутри проблемной функции ошибка не исчезала. Прикрепляю код проблемного скрипта. Так как код не менялся, значит проблемы вызывает среда, в которой код исполняется. Виндоувс был переустановлен, но с той же флешки, что и ранее. Если и вправду проблема не в коде, тогда возникает вопрос: что вызывает такую ошибку? Возможно я прозевал какую-то библиотеку и не установил её, возможно версия AHK поменялась и правила у функций тоже (установил AHK 1.4 с сайта). Может кто-нибудь подсказать в чем может быть проблема? Код скрипта:
#NoEnv
PATH_OVERLAY := RelToAbs(A_ScriptDir, "\Cache\dx9_overlay.dll")
hModule := DllCall("LoadLibrary", Str, PATH_OVERLAY)
if(hModule == -1 || hModule == 0)
{
MsgBox, 48, Error, The dll-file couldn't be loaded!
ExitApp
}
Init_func := DllCall("GetProcAddress", UInt, hModule, Str, "Init")
SetParam_func := DllCall("GetProcAddress", UInt, hModule, Str, "SetParam")
TextCreate_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextCreate")
TextDestroy_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextDestroy")
TextSetShadow_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextSetShadow")
TextSetShown_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextSetShown")
TextSetColor_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextSetColor")
TextSetPos_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextSetPos")
TextSetString_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextSetString")
TextUpdate_func := DllCall("GetProcAddress", UInt, hModule, Str, "TextUpdate")
BoxCreate_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxCreate")
BoxDestroy_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxDestroy")
BoxSetShown_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetShown")
BoxSetBorder_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetBorder")
BoxSetBorderColor_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetBorderColor")
BoxSetColor_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetColor")
BoxSetHeight_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetHeight")
BoxSetPos_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetPos")
BoxSetWidth_func := DllCall("GetProcAddress", UInt, hModule, Str, "BoxSetWidth")
LineCreate_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineCreate")
LineDestroy_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineDestroy")
LineSetShown_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineSetShown")
LineSetColor_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineSetColor")
LineSetWidth_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineSetWidth")
LineSetPos_func := DllCall("GetProcAddress", UInt, hModule, Str, "LineSetPos")
ImageCreate_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageCreate")
ImageDestroy_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageDestroy")
ImageSetShown_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageSetShown")
ImageSetAlign_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageSetAlign")
ImageSetPos_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageSetPos")
ImageSetRotation_func := DllCall("GetProcAddress", UInt, hModule, Str, "ImageSetRotation")
DestroyAllVisual_func := DllCall("GetProcAddress", UInt, hModule, Str, "DestroyAllVisual")
ShowAllVisual_func := DllCall("GetProcAddress", UInt, hModule, Str, "ShowAllVisual")
HideAllVisual_func := DllCall("GetProcAddress", UInt, hModule, Str, "HideAllVisual")
GetFrameRate_func := DllCall("GetProcAddress", UInt, hModule, Str, "GetFrameRate")
GetScreenSpecs_func := DllCall("GetProcAddress", UInt, hModule, Str, "GetScreenSpecs")
SetCalculationRatio_func:= DllCall("GetProcAddress", UInt, hModule, Str, "SetCalculationRatio")
SetOverlayPriority_func := DllCall("GetProcAddress", UInt, hModule, Str, "SetOverlayPriority")
Init()
{
global Init_func
res := DllCall(Init_func)
return res
}
SetParam(str_Name, str_Value)
{
global SetParam_func
res := DllCall(SetParam_func, Str, str_Name, Str, str_Value)
return res
}
TextCreate(Font, fontsize, bold, italic, x, y, color, text, shadow, show)
{
global TextCreate_func
res := DllCall(TextCreate_func,Str,Font,Int,fontsize,UChar,bold,UChar,italic,Int,x,Int,y,UInt,color,Str,text,UChar,shadow,UChar,show)
return res
}
TextDestroy(id)
{
global TextDestroy_func
res := DllCall(TextDestroy_func,Int,id)
return res
}
TextSetShadow(id, shadow)
{
global TextSetShadow_func
res := DllCall(TextSetShadow_func,Int,id,UChar,shadow)
return res
}
TextSetShown(id, show)
{
global TextSetShown_func
res := DllCall(TextSetShown_func,Int,id,UChar,show)
return res
}
TextSetColor(id,color)
{
global TextSetColor_func
res := DllCall(TextSetColor_func,Int,id,UInt,color)
return res
}
TextSetPos(id,x,y)
{
global TextSetPos_func
res := DllCall(TextSetPos_func,Int,id,Int,x,Int,y)
return res
}
TextSetString(id,Text)
{
global TextSetString_func
res := DllCall(TextSetString_func,Int,id,Str,Text)
return res
}
TextUpdate(id,Font,Fontsize,bold,italic)
{
global TextUpdate_func
res := DllCall(TextUpdate_func,Int,id,Str,Font,int,Fontsize,UChar,bold,UChar,italic)
return res
}
BoxCreate(x,y,width,height,Color,show)
{
global BoxCreate_func
res := DllCall(BoxCreate_func,Int,x,Int,y,Int,width,Int,height,UInt,Color,UChar,show)
return res
}
BoxDestroy(id)
{
global BoxDestroy_func
res := DllCall(BoxDestroy_func,Int,id)
return res
}
BoxSetShown(id,Show)
{
global BoxSetShown_func
res := DllCall(BoxSetShown_func,Int,id,UChar,Show)
return res
}
BoxSetBorder(id,height,Show)
{
global BoxSetBorder_func
res := DllCall(BoxSetBorder_func,Int,id,Int,height,Int,Show)
return res
}
BoxSetBorderColor(id,Color)
{
global BoxSetBorderColor_func
res := DllCall(BoxSetBorderColor_func,Int,id,UInt,Color)
return res
}
BoxSetColor(id,Color)
{
global BoxSetColor_func
res := DllCall(BoxSetColor_func,Int,id,UInt,Color)
return res
}
BoxSetHeight(id,height)
{
global BoxSetHeight_func
res := DllCall(BoxSetHeight_func,Int,id,Int,height)
return res
}
BoxSetPos(id,x,y)
{
global BoxSetPos_func
res := DllCall(BoxSetPos_func,Int,id,Int,x,Int,y)
return res
}
BoxSetWidth(id,width)
{
global BoxSetWidth_func
res := DllCall(BoxSetWidth_func,Int,id,Int,width)
return res
}
LineCreate(x1,y1,x2,y2,width,color,show)
{
global LineCreate_func
res := DllCall(LineCreate_func,Int,x1,Int,y1,Int,x2,Int,y2,Int,Width,UInt,color,UChar,show)
return res
}
LineDestroy(id)
{
global LineDestroy_func
res := DllCall(LineDestroy_func,Int,id)
return res
}
LineSetShown(id,show)
{
global LineSetShown_func
res := DllCall(LineSetShown_func,Int,id,UChar,show)
return res
}
LineSetColor(id,color)
{
global LineSetColor_func
res := DllCall(LineSetColor_func,Int,id,UInt,color)
return res
}
LineSetWidth(id, width)
{
global LineSetWidth_func
res := DllCall(LineSetWidth_func,Int,id,Int,width)
return res
}
LineSetPos(id,x1,y1,x2,y2)
{
global LineSetPos_func
res := DllCall(LineSetPos_func,Int,id,Int,x1,Int,y1,Int,x2,Int,y2)
return res
}
ImageCreate(path, x, y, rotation, align, show)
{
global ImageCreate_func
res := DllCall(ImageCreate_func, Str, path, Int, x, Int, y, Int, rotation, Int, align, UChar, show)
return res
}
ImageDestroy(id)
{
global ImageDestroy_func
res := DllCall(ImageDestroy_func,Int,id)
return res
}
ImageSetShown(id,show)
{
global ImageSetShown_func
res := DllCall(ImageSetShown_func,Int,id,UChar,show)
return res
}
ImageSetAlign(id,align)
{
global ImageSetAlign_func
res := DllCall(ImageSetAlign_func,Int,id,Int,align)
return res
}
ImageSetPos(id, x, y)
{
global ImageSetPos_func
res := DllCall(ImageSetPos_func,Int,id,Int,x, Int, y)
return res
}
ImageSetRotation(id, rotation)
{
global ImageSetRotation_func
res := DllCall(ImageSetRotation_func,Int,id,Int, rotation)
return res
}
DestroyAllVisual()
{
global DestroyAllVisual_func
res := DllCall(DestroyAllVisual_func)
return res
}
ShowAllVisual()
{
global ShowAllVisual_func
res := DllCall(ShowAllVisual_func)
return res
}
HideAllVisual()
{
global HideAllVisual_func
res := DllCall(HideAllVisual_func )
return res
}
GetFrameRate()
{
global GetFrameRate_func
res := DllCall(GetFrameRate_func )
return res
}
GetScreenSpecs(ByRef width, ByRef height)
{
global GetScreenSpecs_func
res := DllCall(GetScreenSpecs_func, IntP, width, IntP, height)
return res
}
SetCalculationRatio(width, height)
{
global SetCalculationRatio_func
res := DllCall(SetCalculationRatio_func, Int, width, Int, height)
return res
}
SetOverlayPriority(id, priority)
{
global SetOverlayPriority_func
res := DllCall(SetOverlayPriority_func, Int, id, Int, priority)
return res
}
RelToAbs(root, dir, s = "\") {
pr := SubStr(root, 1, len := InStr(root, s, "", InStr(root, s . s) + 2) - 1)
, root := SubStr(root, len + 1), sk := 0
If InStr(root, s, "", 0) = StrLen(root)
StringTrimRight, root, root, 1
If InStr(dir, s, "", 0) = StrLen(dir)
StringTrimRight, dir, dir, 1
Loop, Parse, dir, %s%
{
If A_LoopField = ..
StringLeft, root, root, InStr(root, s, "", 0) - 1
Else If A_LoopField =
root =
Else If A_LoopField != .
Continue
StringReplace, dir, dir, %A_LoopField%%s%
}
Return, pr . root . s . dir
}
UPD: Только что попытался запустить скрипт не через инклуд а напрямую. Запустился успешно, однако мне необходимо его инклудить.
UPD2: Имелись откомпилированные версии моего .ahk скрипта, запустил их - все работает шикарно. Узнал какая версия AHK была до этого (в свойствах файла - 1.1.26.01) - откатился до неё, проблема осталась.