Beiträge von Chrischn
-
-
Code
Func _ReduceMemory($i_PID = @AutoItPID) If $i_PID <> -1 Then Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) Else Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) EndIf Return $ai_Return[0] EndFunc;==> _ReduceMemory()
variable used without beeing declared... -
So richtig?
siehe ganz unten, ganz links im Screenshot -
Hallo!
Danke! Klappt leider nicht.
Das unkompilierte Skript wird gekillt sobald die Funk aufgerufen wird.
Das kompilierte gibt dann einen AutoIt-Error "Variable used without being declared". Kann ich aber nicht nachvollziehen.. -
hi moin.
Nein weiteren Quellcode gibt´s nicht.
Aber die 'LogAitDave_V3.0.exe' wird ja, wenn ich mich recht entsinne, von meinem Skript nur immer wieder neu ausgeführt. Und trotzdem schwillt der Speicherbedarf des AI-Skripts immer weiter an. -
OK!
Anbei die include und Zubehör.
http://www.autoit.de/index.php?page=Thread&threadID=23507 -
Deswegen wär´s wohl sinnvoll, wenn sich das jemand anguckt, der sich mit der libnodave.dll schonmal auseinandergesetzt hat.
-
[quote='Kanashius','https://autoit.de/index.php/Thread/23507-LibNoDave-UDF-zur-Kommunikation-mit-Simatic-SPS/?postID=664383#post664383']
C
Alles anzeigen#include"LogAitDave_UDF.au3" _LAD_SetIP("192.168.1.4") #include <array.au3> while 1 $arr[0] = _LAD_ReadWord(0) $arr[1] = _LAD_ReadWord(2) $arr[2] = _LAD_ReadWord(4) $arr[3] = _LAD_ReadWord(6) _ArrayDisplay($arr) wend
Dieses bischen reicht schon. Da wird nichts von mir gespeichert...
-
Hallo und guten Morgen!
Ich habe für meine selbstgebaute Heizungsanlage eine Steuerung auf Basis einer Siemens LGOG! OBA7 (mit Ethernet) und dazu eine Visualisierung auf AutoIt.
Soweit funktioniert alles seeehr geil. Werte werden angezeigt, Schaltzustände werden angezeigt.Über die LibNoDave UDF werden alle 0,5 sek zyklisch einige Register (Merker und DWord´s) von der LOGO! gelesen.
ABER (und jetzt zum Problem) :
Ich kann die AutoIt-Anwendung nicht ewig offen lassen, weil Windows sagt: " Ey kollege, die Anwendung frisst soo hammer viel Speicher, entweder beendest Du die jetzt oder Du stirbst".Dann hab ich mich mir den Speicherbedarf von dem AutoIt-Task mal angesehen uns tatsächlich: mit jedem Zyklus in dem Daten von Logo! nach AutoIt geschaufelt werden, wächst der Speicherbedarf um ein paar Hundert Kilobyte.
Dann habe ich mal einen 3-Zeiler geschrieben in dem NUR von der LOGO! gelesen wird, um Fehler in meinem Skript auszuschließen - gleiches Symptom.
Hat jemand eine Idee?Visualisierung.jpg -
Eins vorweg: Ich denke mir nur das es so ist wie ich es gleich begründe, weiß (!) allerdings nicht ob diese Erklärung richtig ist.
Im Normalfall werden Funktionen aufgerufen und für ihre Aufrufparameter ein Stack (Speicherbereich) bereitgestellt.
Bei Event-Funktionen gibt es keine Parameter so dass der EventHandler, welcher die Funktionen aufruft keinen Speicher dafür erstellt sondern einfach nur direkt den Befehlszeiger auf den Funktionsanfang setzt.
Die Funktion kann also auch keinen Standardwert für den Parameter erstellen weil es keinen Platz gibt wo der Parameter gespeichert werden sollte.
Daher muss man die Funktion wieder normal vom AutoIt-Interpreter aufrufen lassen statt vom Event-Handler.
Das geht z.B. über eine Wrapperfunktion:so hab ich´s auch schon gemacht... das war quasi mein workaround..
Danke!
-
Bei IsDeclared gibt man keine Variable an, sondern den Variablennamen als String:
[autoit]If Not IsDeclared('a') Then Global $a ; oder: Global $a = 42
[/autoit]
vielen herzlichen dank!Das hatte ich übersehen. Nun kann ich mit dem Wissen über Parameter (werden bei GUICtrlSetOnEvent ignoriert) und IsDeclared ( als String übergeben )
was vernünftiges basteln.DANKE!
-
$a ist in dem Fall nur für die Funktion deklariert (lokal deklariert), da sie ein Parameter der Funktion ist. Bei IsDeclared darfst du die Variable nicht einfach so angeben, hättest du in die Hilfe geguckt, wüsstest du das.
€dit: Habs etwas falsch verstanden. Bei GUICtrlSetOnEvent werden bei dem Funktionsaufruf afaik alle Parameter ignoriert --> $a is also nichtmehr deklariert.So gehts: (Bei mir jedenfalls)
Öffne mich
[autoit]Global $a
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOneventmode", 1);####### Problem 1 #######
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If Not IsDeclared($a) Then $a = "anything wonderfull"
;#########################;#### Supergeniale Funktion ####
[/autoit] [autoit][/autoit] [autoit]
Func test($a = 2)
If $a = 0 Then MsgBox(0, "test", "a = " & $a)
If $a = 1 Then MsgBox(0, "test", "a = " & $a)
If $a = 2 Then MsgBox(0, "test", "a = " & $a)
EndFunc ;==>test
;###############################test(1) ; <-- so funktionierts
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
test(2) ; <-- so auch
test(0) ; <-- so auch
test() ; <-- so auchGUICreate("SchrottGUI", 500, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetState();###### Problem 2 #########
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateButton("SuperButton", 50, 50) ; <-- so funktionierts NICHT mehr
GUICtrlSetOnEvent(-1, "test")
;##########################While 1
[/autoit]
Sleep(100)
WEnd
UND was ist mit Problem2? Problem1 ist ja mal wirklich Schrott! -
$a ist in dem Fall nur für die Funktion deklariert (lokal deklariert), da sie ein Parameter der Funktion ist. Bei IsDeclared darfst du die Variable nicht einfach so angeben, hättest du in die Hilfe geguckt, wüsstest du das.
€dit: Habs etwas falsch verstanden. Bei GUICtrlSetOnEvent werden bei dem Funktionsaufruf afaik alle Parameter ignoriert --> $a is also nichtmehr deklariert.
Was soll ich dann deiner Meinung nach mit einer Funktion anfangen, die prüft, ob eine Variable deklariert wurde, WENN ich die vorher unbedingt deklarieren MUSS?
Leuchtet mir nicht so ein.
Ich hatte mir Problem1 als Lösung für Problem 2 vorgestellt. -
AutoIt: 3.3.6.1
Scite: 1.79Hey Leude!
[autoit]
Hab hier ein Deklarationsproblem,
hier ein Beispiel:
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
;####### Problem 1 #######
;~ If Not IsDeclared($a) Then $a = "anything wonderfull"
;#########################;#### Supergeniale Funktion ####
[/autoit][autoit][/autoit][autoit]
Func test($a = 2)
If $a = 0 Then MsgBox(0, "test", "a = " & $a)
If $a = 1 Then MsgBox(0, "test", "a = " & $a)
If $a = 2 Then MsgBox(0, "test", "a = " & $a)
EndFunc ;==>test
;###############################test(1) ; <-- so funktionierts
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
test(2) ; <-- so auch
test(0) ; <-- so auch
test() ; <-- so auchGUICreate("SchrottGUI", 500, 200)
[/autoit][autoit][/autoit][autoit]
GUISetState();###### Problem 2 #########
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
GUICtrlCreateButton("SuperButton", 50, 50) ; <-- so funktionierts NICHT mehr
GUICtrlSetOnEvent(-1, "test")
Opt("GUIOneventmode", 1)
;##########################While 1
[/autoit][autoit][/autoit][autoit][/autoit]
Sleep(100)
WEndDas "Variable used without being declared" - Problem hat man aber nur per "GUICtrlSetOnEvent" oder per "IsDeclared".
Jemand ne Idee??
Ich hab zwar eine eine 3-Zeilige Problem-Umgehung, ist aber eigentlich nicht schön...
Vielen Dank im Vorraus!! -
sorry, stell grad fest, dass das in Windows wohl nicht 100%ig hex ist...
tut mir Leid. -
-
Hey Leude!
Ihr kennt bestimmt das Problem, dass wenn man ein GUI-Menü öffnet oder das GUI selbst mit der Maus durch die Gegend "drag"ed, das Skript solange pausiert oder?
Hat jemand ne simple Lösung dazu?
thx
grz
Chrischn -
moin
und danke erstmal!unkompiled bekomme ich jetzt ne Box mit
Errorcode 0x80040154
Errordescription "Klasse nicht registriert"und x32 compiled erhalte ich ne Box mit
Errorcode 0x80020006
Errordescription "unbekannter name" -
Hey Leute!
Habe aus dem Forum die VLC-au3 geladen und bekomme immer nur folgende Fehlermeldung:
Titel der BOX: " COM/OBJECT ERROR! "
Text der Box: "Error in Line " blablub
Error description: Klasse nicht registriertSystem: Windows7 H.Pr. 64Bit
VLC-Player-Version: 1.1.4Hat jemand nen Plan zur Lösung?
Das hier ist mein Test:
[autoit]
[/autoit][autoit][/autoit][autoit][/autoit]
#include <vlc.au3>
$Init = _VLC_Obj_Init()
sleep(2000)
_VLC_AddItem($Init, "test.mp3")
sleep(2000)
_VLC_PlayItem($Init, 0)Gruß
Chrischn -
vielen Dank!
Hilft mir sehr beim Projekt!DANKE!