GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

  • Hallo Zusammen,

    eines meiner Mammut-Programme hat mittlerweile über 10.000 Lines of Code inkl Kommentare.

    Es ist eine GUI mit mehreren Tabs und einigen Combo-Boxen.

    Bis zum Compiler 3.3.5.6 funktionierte sowohl das x86-, also auch das x64 Compilat.

    Jetzt seit gestern, wo ich den 3.3.6.0-Compiler installiert habe, geht kein GUICtrlSetData mehr an den ComboBoxen, im x64-Compilat. Es scheint so, als würde es einfach nicht ausgeführt werden.
    Gleicher Source, nur eben mit x86-Switch compiliert, funktioniert tadellos.

    Wenn ich jetzt aber nur ne kleine GUI baue, mit ner ComboBox oder wenn ich das Beispiel aus dem Help nehme, und diese compiliere, tauchen diese Fehler nicht auf.

    Ich hab auch schon einen Rechner frisch aufgesetzt, AutoIt 3.3.6.0 und SciTE installiert und dort compiliert, aber auch mit dem Compilat habe ich das gleiche Problem.

    Wie kann ich den Fehler einschränken? Um nur die Gui ohne dem Drumherum zum Laufen zu bringen, also den Code abzustrippen, würde ich wahrscheinlich Stunden brauchen.

    Habt ihr eine Idee, was ich machen kann?

    Besten Dank und viele Grüße!
    R@iner

  • Hallo SkyTeddy,

    hast du zum erstellen evtl.

    [autoit]

    _GUICtrlComboBox_Create

    [/autoit]

    verwendet. Wenn ja versuche einmal ein kleines Beispiel zu skripten, in dem der Fehler auch auftritt,

    mfg (Auto)Bert

  • Hallo Bert,

    ich hab jetzt nochmal versucht, es abzustrippen! :) Und was soll ich sagen, der Fehler tritt nun auf! Zumindest bei mir, in der VM mit 64bit Windows 7

    Hat jemand nen x64-PC, und kann das mal mit dem 3.3.6.0er compilieren und die Exe dann starten.

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; Globale Vars
    Global $ruG_DefaultNotSet = "-"
    Global $ruG_NWadapterListe = "" ; Collected Adapter-Names

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    AdapterAuswahl()
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func AdapterAuswahl()
    Local $msg
    Local $rut_LastX = 10, $rut_LastY = 15, $rut_width = 170, $rut_height = 20

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Adapter-Auswahl", 250, 100)

    [/autoit] [autoit][/autoit] [autoit]

    Local $ruCO_NWverbindungsName = GUICtrlCreateCombo($ruG_DefaultNotSet, $rut_LastX, $rut_LastY, $rut_width, $rut_height) ; Adapter-Name-Combo

    [/autoit] [autoit][/autoit] [autoit]

    ; ...
    ; ...

    [/autoit] [autoit][/autoit] [autoit]

    $ruG_NWadapterListe = "LAN-Verbindung|LAN-Verbindung 2|LAN-Verbindung 3|LAN-Verbindung 4"
    Local $rut_wert = "LAN-Verbindung 2"

    [/autoit] [autoit][/autoit] [autoit]

    ; ...
    ; ...

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($ruCO_NWverbindungsName, "") ; Adapter-Name-Combo löschen
    GUICtrlSetData($ruCO_NWverbindungsName, $ruG_NWadapterListe, $rut_wert) ; Adapter-Name-Combo setzen

    [/autoit] [autoit][/autoit] [autoit]

    ; ...
    ; ...

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>AdapterAuswahl

    [/autoit]

    Achso, noch ne Anmerkung. Die Werte werden anscheinend schon gesetzt, aber das Menü klappt nicht auf. Mit Pfeil rauf und runter kann man auswählen.

    Besten Dank und viele Grüße!
    R@iner

  • Hallo Zusammen,

    Oskar dank Dir! Ich konnte den jetzt Fehler lokalisieren, wobei ich mir nicht sicher bin, ob das nun mein Fehler ist oder doch ein Fehler des Compilers.

    Ich bin bisher davon ausgegangen, daß der Wert "height" die Höhe der eigentlichen Control angibt. Bei Buttons und Labels sieht man ja die Höhe deutlich.

    Nach meinen Tests ist die "height" bei einer Combo anscheinend die Höhe inkl. des aufgeklappten Menüs und wirkt sich nicht auf die Höhe des nicht aufgeklappten Controls aus.

    Jetzt stellt sich für mich die Frage, was ist der Wert "height" bei einer Combo wirklich? Und warum ging das bisher immer "gut", nur jetzt nicht mehr bei x64-Compilat der V3.3.6.0?

    Und es erklärt immer noch nicht die Frage, warum mein Beispiel auf Posting 3 nicht geht, denn da arbeite ich ohne "height".

    Hier mein Testscript, was das verdeutlicht:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Example()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    Local $msg
    Local $MyGui = GUICreate("Combo-Test", 290, 620) ; will create a dialog box that when displayed is centered

    [/autoit] [autoit][/autoit] [autoit]

    Local $LastX = 10, $LastY = 15, $width = 170, $height = -10

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateCombo("item1", $LastX, $LastY, $width) ; no height
    GUICtrlSetData(-1, "item2|item3|item4", "item3") ; add other item snd set a new default
    GUICtrlCreateLabel("no height", $LastX + $width + 20, $LastY, 50)

    [/autoit] [autoit][/autoit] [autoit]

    For $x = 1 To 14
    $LastY += 40
    $height += 10
    GUICtrlCreateCombo("item1", $LastX, $LastY, $width, $height)
    GUICtrlSetData(-1, "item2|item3|item4|item5", "item3") ; add other item snd set a new default
    GUICtrlCreateLabel("height "& $height, $LastX + $width + 20, $LastY, 50)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_HIDE)
    GUIDelete($MyGui)
    EndFunc ;==>Example

    [/autoit]

    Happy computing!
    R@iner

    2 Mal editiert, zuletzt von skyteddy (9. März 2010 um 14:35)

    • Offizieller Beitrag

    Upps! Hab gerade nochmal in der Hilfe nachgesehen.

    Zitat


    Under Windows XP/2003 Windows will adjust the size of the opened combo. On other Windows versions you can define this size with the "height" parameter if the default value is not BIG enough to contain at least one line.


    Das könnte man jetzt so interpretieren, dass man die Höhe entsprechend groß wählen sollte. Andererseits, warum tritt der Fehler nur bei der 64Bit-Exe auf?
    Als Script und als 32Bit-Exe wird die Auswahl immer komplett dargestellt. :S

    Aber danke für den Hinweis auf diesen "Bug". So haben wir wenigstens einen Workaround. :)

  • In meinem großen Script sehe ich gerade, daß ich bei keiner Combo irgendeine Höhe angegeben habe und es geht trotzdem nicht. :(

    In dem kleinen Beispiel von mir in Posting 5 geht es aber problemlos, wenn man gar keine Höhe angibt. Irgendwas ist da faul.

    Und es erklärt nicht, warum es nur bei x64-Exes nicht geht.

    Ich hab jetzt keine Zeit mehr, dem Fehler hinterher zu jagen. Ich bleibe besser bei 3.3.5.6.

    Heute Abend werde ich dann den Bug melden.

    Viele Grüße!
    R@iner

  • Dass das manifest fehlt, dürften die Entwickler schon wissen ^^ Valik und Jon haben im englischen Forum schon auf den Thread geantwortet.

  • Grins, ah ok :)

    Ich bin dem Link bei deinem Beitrag von oben nicht gefolgt, weil ich dachte, das ist ein Link für ne Anleitung zum RessourceHacker und zum Austausch des Manifests. Und das tue ich mir nicht an.

    Dank Dir und noch nen schönen Abend!
    R@iner