In AutoIt gibt es 3 Möglichkeiten eine Variable zu deklarieren
"Local $variable" -> Diese Variable ist nur in der Funktion / Scope gültig
"Global $variable" -> Diese ist überall gültig
$variable = 'test' -> Diese ist auch nur in der Funktion / Scope gültig
Func test()
Local $variable = 'test'
MsgBox(0,0, $variable)
EndFunc
Func test2()
$variable = 'test2'
MsgBox(0,0, $variable)
EndFunc
Beide Funktion machen genau das selbe...
Ich arbeite mit einer UDF, welche mir ein DLLStructElement zurück liefert:
Func CreateDllStruct()
Local $lBuffer = DllStructCreate('ptr')
Local $lDllStruct = DllStructCreate('long id;long aId;byte unknown1[4];ptr bag;ptr modstruct;long modstructsize;ptr customized;byte unknown2[4];byte type;byte unknown3;short eId;short value;byte unknown4[2];short interaction;long m;ptr modString;byte unknown5[4];ptr NameString;byte unknown6[15];byte q;byte e;byte unknown7[1];byte slot')
DllCall($mKernelHandle, 'int', 'ReadProcessMemory', 'int', $mGWProcHandle, 'int', DllStructGetData(1, 'Array') + 4 * ($aSlot - 1), 'ptr', DllStructGetPtr($lBuffer), 'int', DllStructGetSize($lBuffer), 'int', '')
DllCall($mKernelHandle, 'int', 'ReadProcessMemory', 'int', $mGWProcHandle, 'int', DllStructGetData($lBuffer, 1), 'ptr', DllStructGetPtr($lDllStruct), 'int', DllStructGetSize($lDllStruct), 'int', '')
Return $lDllStruct
EndFunc
Func TestDllStruct()
Local $lStruct
Local $iQ, $iM
$lStruct = CreateDllStruct()
$iQ = DllStructGetData($lStruct, 'Q')
$iM = DllStructGetData($lStruct, 'M')
EndFunc
Alles anzeigen
Wenn ich in der Func TestDllStruct, die Rückgabe von CreateDllStruct in eine Variable speicher, stürtzt mir das Programm ohne Fehlermeldung ab. Wenn ich allerdings die Variable mit "Local" vorher definiere funktioniert alles ohne probleme.
Wenn ich das ganze ohne ein "Local $lStruct" bearbeite siehe unteres Test2() beispiel, stürzt mir das Programm auf bzw. kann keine Werte durch DllStructGetData laden.
Allerdings dürfte es doch zwischen
und
keinen direkten Unterschied geben oder?
Kann mir das Verhalten jmd. erkären?
_
haendler