Ich schreibe momentan an einem Programm.
Dabei nutze ich ein Scripting.Dictionary. Mein Problem ist, dass ich als Key den Handle von Controls nehmen möchte und als Value ein Struct.
Die Hashtable hab ich schnell verworfen, da aus dem Stuct dann ein String wird.
Das Dictionary kann aber mit dem Struct ohne Probleme umgehen. Dafür ist dort das Problem, dass die Controls in meinem Programm Handles haben, die (meine Vermutung) zu groß für einen Key sind.
Vielleicht kann mich dort einer von euch erleuchten, was AutoIt mit den Datentypen dort anstellt.
Bei diesem Beispielscript tritt der Fehler bei mir nicht auf, auch wenn alle Daten gleich sind. Einziger unterschied: In dem Bespielscript sind die Handle deutlich kleiner.
#include <WindowsConstants.au3>
global $iWidth=800,$iHeight=600
$hGui=GUICreate("",$iWidth,$iHeight,-1,-1,BitOR($WS_SIZEBOX,$WS_MINIMIZEBOX,$WS_CAPTION,$WS_MAXIMIZEBOX))
$cButton=GUICtrlCreateButton("test",5,5)
$cListview=GUICtrlCreateListView("col",5,50,$iWidth-10,$iHeight-55)
GUISetState()
local $tagExample="INT temp;"
$tStruct=DllStructCreate($tagExample)
DllStructSetData($tStruct,"temp",4)
$controls=ObjCreate("Scripting.Dictionary")
;$controls.add(GUICtrlGetHandle($cButton),$tStruct);Error The requested action with this object has failed.
ConsoleWrite(Int(GUICtrlGetHandle($cButton))&@crlf)
$controls.add(Int(GUICtrlGetHandle($cButton)),$tStruct)
ConsoleWrite(DllStructGetData($controls(Int(GUICtrlGetHandle($cButton))),"temp")&@crlf)
while sleep(10)
$iMsg=GUIGetMsg()
Switch $iMsg
Case -3
_close()
EndSwitch
WEnd
Func _close()
exit
EndFunc
Alles anzeigen
Da Handle nicht als Key genommen werden können hab ich probiert daraus Int, Strings,... zu machen. Selbes Ergebnis. Im Beispielscript klappts, im anderen stürzt ab:
Soll reingeschrieben werden:
String: 0x00370292
$__DG_Controls.add(String($iControl),$tLayoutElement)
Int: 2622430
$__DG_Controls.add(Int($iControl),$tLayoutElement)
We intercepted a COM Error !
err.description is:
err.windescription: Ausnahmefehler aufgetreten.
err.number is: 80020009
err.lastdllerror is: 0
err.scriptline is: 141
err.source is:
err.helpfile is:
err.helpcontext is: 00x0036033A
We intercepted a COM Error !
Alles anzeigen
Ich find keine Bessere Erklärung, als dass die Variable größer ist...
(Das Dictionary möchte ich nutzen, da später über das Handle auf das Struct zugegriffen werden soll und sich der Inhalt des Dictionarys oft ändern kann.)
Ich hoffe ihr könnt mir helfen, Kanashius