Der Prozedureinsprungpunkt "luaL_register" wurde in der DLL "f:\AutoIt\AutoIt3_LuaScripts\shell.dll" nicht gefunden.

  • Mir war aufgefallen, dass mit SciTE 3.7.5.0 folgender Befehl nicht mehr funktioniert...

    Code
    ; Clear console output pane of SciTE after 5000 ms
    Sleep(5000)
    ControlSend("[CLASS:SciTEWindow]", "", "Scintilla2", "+{F5}") ; Shift+F5

    ...denn die "output pane" wird dadurch nicht mehr gelöscht, wie es in früheren Versionen der Fall war.


    In SciTE 3.7.5.0 im Menü Extras ist zudem der dritte Menüpunkt Clean Shift+F7 ausgegraut ist, sicher weil die Tastenkombination Shift+F7 bereits für Test Compile vergeben ist. Hier vermute ich, dass der Shortcut für Clean vormals Shift+F5 war und es deshalb nicht mehr funktioniert. Mit Shift+F7 funktioniert es aber auch nicht, womöglich weil der Shortcut jetzt doppelt belegt ist.


    Deshalb habe ich auf http://www.autoitscript.com nachgesehen, ob es evtl. eine aktuellere Version von SciTE gibt, in der dieser Fehler evtl. schon gefixt wurde. In der Tat... es gibt eine aktuellere Version... SciTE 4.1.2.0... aber die enthält diesen Fehler auch und noch einen, den ich gar nicht gut finde.


    Fehler: Der Prozedureinsprungpunkt "luaL_register" wurde in der DLL "f:\AutoIt\AutoIt3_LuaScripts\shell.dll" nicht gefunden.


    Die Meldung ist irreführend, denn der Prozedureinsprungpunkt "luaL_register" befindet sich nicht in der shell.dll, sondern in der SciTE.exe - der aber in SciTE 4.1.2.0 nicht mehr existiert!


    Dadurch können keine Lua-Scripte mehr verwendet werden, welche die Funktionen der shell.dll benötigen - das sind bei mir praktisch alle Lua-Scripte von BugFix !


    Diese Zeile löst die Fehlermeldung aus...

    Code: SciTEStartup.lua
    -- load library - Info --> shell.html
    require "shell"


    PS: Jedes mal, wenn in SciTE ein Tab gewechselt/geladen wird, wird die SciTEStartup.lua ausgeführt!


    Im Anhang mal meine SciTEStartup.lua.

    Die wird bei mir nicht aus dem Verzeichnis c:\Program Files (x86)\AutoIt3\SciTE\lua\SciTEStartup.lua, sondern @LocalAppDataDir & '\AutoIt v3\SciTE\SciTEStartup.lua' geladen,

    weil ich in meiner SciTEUser.properties folgenden Eintrag hinzugefügt habe:

    Code
    #~ Lua script that will be loaded when SciTE starts to set up the global state for Lua.
    ext.lua.startup.script=$(SciteUserHome)\SciTEStartup.lua


    Demzufolge ist die aktuelle Version von SciTE (4.1.2.0) für mich nicht mehr nutzbar... oder übersehe ich hier etwas?





  • Das ist natürlich katastrophal. Ich verwende noch SciTE in der Version 3.6.6.0. Da die Folgeversionen keine (für mich) sinnvollen Änderungen enthalten, habe ich nie upgedatet.

    Sollte das Entfernen von luaL_register Absicht sein, kann das nur bedeuten, dass es Jos nicht gefällt, dass SciTE4AutoIt durch diese Schnittstelle für Jedermann kreativ erweiterbar ist. Das wäre dann ein absolutes Armutszeugnis.

    Aber, wie schon angesprochen: Es gibt keinen Grund diese SciTE-Version zu nutzen.


    Die von mir verwendeten Funktionen der shell.dll kann man auch auf Systemaufrufe umleiten - hat aber den Nachteil, dass dabei kurz das CMD-Fenster aufpoppt.

    Gravierender ist das, wenn man die gui.dll oder lfs.dll nutzt. Da gibt es dann keinen direkten Ersatz.


    EDIT:

    Übrigens ist auch in 3.6.6.0 der ausgegraute Menüeintrag "Clean Shift+F7" enthalten. Ist mir noch nie aufgefallen, da ich eigentlich nie die Menübefehle per Maus klicke, sondern "Clear Output Pane" mit "Shift+ F5" direkt aufrufe.

    Ich habe jetzt mal in der 3.6.6.0 alle properties nach dem Menübefehl "Clean" durchsucht - den gibt es gar nicht! Nirgendwo erfolgt eine Zuweisung als Befehl und Shortcut. Hardcodiert?

    In meinem Menü ist zumindest tatsächlich noch enthalten "Clear Output Shift+F5".

    Muss man nicht verstehen. ?(

  • Das ist natürlich katastrophal. Ich verwende noch SciTE in der Version 3.6.6.0. Da die Folgeversionen keine (für mich) sinnvollen Änderungen enthalten, habe ich nie upgedatet.

    Sollte das Entfernen von luaL_register Absicht sein, kann das nur bedeuten, dass es Jos nicht gefällt, dass SciTE4AutoIt durch diese Schnittstelle für Jedermann kreativ erweiterbar ist. Das wäre dann ein absolutes Armutszeugnis.

    Aber, wie schon angesprochen: Es gibt keinen Grund diese SciTE-Version zu nutzen.

    Fatal insbesondere für Leute, die AutoIt (+SciTE4AutoIt3) neu installieren bzw. updaten und z.B. die LUA-Skripte von BugFix nutzen :thumbdown:.

    In der Historie der von Jos modifizierten SciTE-Versionen wird über ein Entfernen der luaL_register

    kein Wort verloren : https://www.autoitscript.com/autoit3/scite/docs/History.html


    Das unterstützt die Vermutung von BugFix , dass 'kreative Erweiterungen' nicht erwünscht sind.

    EDIT (21.01.2019 18:50 Uhr) :

    Wie sich mittlerweile herausgestellt hat, liegt das Problem nicht bei der modifizierten SciTE-Version von autoitscript.com (Jos), sondern bereits beim akt. Original-SciTE !

    Es ist also möglich, dass dieses Verhalten in einer zukünftigen Version gefixt wird !


    Das Download-Archiv für Scite4AutoIt3 macht ja recht große Versionssprünge, siehe :

    https://www.autoitscript.com/autoit3/scite/download/archive/

    Die von BugFix angesprochene Version 3.6.6 (vom 12.06.2016) findet man unter :

    https://www.autoitscript.com/a….1119.0-SciTE4AutoIt3.exe

    Die nächstneuere Version ist die 3.7.3. (vom 24.02.2017 - modified am 08.07.2018 ) :

    https://www.autoitscript.com/a…4.935.0-SciTE4AutoIt3.exe

    (ob das Problem dort bereits auftritt, habe ich aber nicht geprüft !)

    Könnte ggf. ein renommierter User mit autoitscript-Account mal nachfragen, ob das Absicht ist ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi ()

  • Jos hat bereits auf das Ticket von BugFix geantwortet und will deinen Bericht nun mit Neils Scite-Interest-Gruppe verknüpfen.


    Das sieht doch schon mal gut aus... ich habe dem Ticket eine Liste hinzugefügt, in der man sieht, welche Prozedureinsprungpunkte von welcher SiTE-Version unterstützt werden, denn in den neueren SciTE-Versionen sind da noch einige mehr weggefallen, aber auch einige hinzugekommen.


    Aber, wie schon angesprochen: Es gibt keinen Grund diese SciTE-Version zu nutzen.

    Hm, ok, die SciTE.exe vielleicht nicht unbedingt, aber zumindest einige der beiliegenden Files in den neueren Versionen werden doch benötigt, wenn du eine aktuelle AutoIt-Version benutzt, weil ja sonst die neuen Funktionen nicht bekannt sind und entfernte Funktionen immer noch mitgeschleppt werden, oder? Ich denke da z.B. an: au3.api, au3.autoit3wrapper.api und SciLexer.dll, ...


    Das mit den doppelten Shortcuts im Extras-Menü (Shift+F5 [Test Run|Ausgabe löschen] und Shift+F7 [Clean|Test Compile]) sollte aber wohl besser auch gemeldet werden... und das die Ausgabe eben nicht mehr mit Shift+F5 und auch nicht mit Shift+F7 gelöscht werden kann.


    Dann werde ich jetzt mal austüfteln, wie ich die Ausgabe aus dem Script heraus gelöscht bekomme...



  • Mal als Zusammenfassung das vorläufige Ergebnis:

    - Ursache des Problems ist die Änderung im Original SciTE

    - Diese Änderung ist eine Anpassung an die Änderungen in der API von Lua 5.2 und Lua 5.3

    - Das Problem war auch Thema im Scintilla-Forum. Eine Lösungsvariante wurde dort beschrieben

    - Um dieses Problem für uns zu fixen, ist eine Änderung beim Kompilieren der SciTE.exe erforderlich. Ich gehe davon aus, dass Jos das in der nächsten Version angeht.

  • PS: Jedes mal, wenn in SciTE ein Tab gewechselt/geladen wird, wird die SciTEStartup.lua ausgeführt!

    Dies ist der Fall, wenn ext.lua.reset=1 ist.


    In der SciTE4AutoIt3-Hilfe steht... "If ext.lua.reset is 0 (the default), the startup script property is checked only once - when SciTE starts."

    In der SciTEGlobal.properties steht bei mir jedoch ext.lua.reset=1, richtig wäre laut Hilfe aber ext.lua.reset=0!


    Habe das jetzt mal in meiner SciTEUser.properties auf 0 gesetzt.