Variablen in RAM speichern - Daten zentralisieren - für mehrere Scripts zugänglich machen

  • Hallo Leute,


    kann man mit einem Script Variablen in den Arbeitsspeicher speichern und mit einen anderen Script auslesen?
    Oder alternativ eine Datenbank für mehrere Script parallel nutzen?


    Ich bevorzuge die schnellste Variante :P


    Hab leider bis jetzt noch nichts zu dem Thema gefunden....



    Schöne Grüße :rock:

  • Also ich erstelle in mehreren Scripts laufend sehr viele Informationen die am Ende zetral von einem Script ausgewertet werden müssen.

    Mir ist es halt wichtig, das da richtig speed hinter steckt.

    Daher kam mir halt der Gedanke mit dem Arbeitsspeicher


    Eine Arbeitsspeicher basierende Datenbank wo mehrere Scripts drauf zugreifen können... Das brauche ich

  • Ich hatte mir vor zig Jahren mal ein Template fürs Multi-Processing mit einem Shared-Memory geschrieben.
    Da wäre ein Weg beschrieben wie man auf einen gemeinsamen Speicher zugreifen kann:


  • Hi,


    ich hatte zu diesem Thema eine DLL erstellt, die aus nichts weiter als einem Speicherplatz für genau diese Anwendung (Zugriff mehrerer Programme auch unterschiedlicher Programmiersprachen auf gemeinsame Daten im Speicher) besteht.

    Eine DLL ist dazu gedacht, EIN MAL in den Speicher geladen zu werden und dann deren Funktionen von verschiedenen Programmen aufrufen zu lassen.



    Thema und Beispielscript hier: RE: Kommunikation Skripte untereinander

    Wenn du zu diesem Thema weitere Infos brauchst, einfach melden!

    Im späteren Verlauf des o.a. Threads werden auch 64-Bit DLL´s erstellt.


    /EDIT

    Win10 benötigt geringfügig anders erstellte DLL´s aus ASM-Dateien.

    Hier die DLL und das Testscript

    sharedmem.zip

    Das kompilierte (nicht aus Scite mit F5, das startet nur ein Mal) Testscript mehrmals starten, es erscheinen auf dem Desktop entsprechend Fenster an zufälliger Position.

    Nur beim ersten Start des Programms wird die DLL in den Speicher geladen, alle weiteren Programme greifen dann auf diese Datei zurück.

    In jedem dieser Fenster läuft ein unabhängiger Timer.

    Mit klick auf den Reset/Sync-Button in irgendeinem dieser Fenster werden alle (!) Timer in allen Fenstern zurückgesetzt/synchronisiert.

    Im Prinzip wird nichts weiter gemacht als ein Byte mit dem Wert 1 in den Speicher an der Adresse der DLL-Funktion GetPointer() zu schreiben. (aufmerksame Leser des Codes werden feststellen, dass es das 8. Byte ist^^)

    GetPointer() liefert einfach nur die Adresse des Speicherblocks in der DLL zurück.

    Das Programm fragt nun einfach nur diesen Wert ab, ändert er sich, wird der Timer neu gestartet.

    Da alle laufenden Programme auf die identische Speicheradresse zugreifen, aktualisieren sich somit auch alle laufenden Programme gleichzeitig!


    Die DLL reserviert 1000 Dwords, also 4000 Bytes Speicher. die kann man aus AutoIt per DllStructCreate() so aufteilen, wie man sie braucht, die Basisadresse ist der vom Dllcall zurückgegebene Pointer auf den Speicher.

    4000 Bytes sind idR reichlich genug für solche Anwendungen, sollte man mehr brauchen, einfach den ASM-Code entsprechend anpassen, in den FASMW-Editor laden, per CTRL-F9 die DLL neu erstellen und Spass haben!


    /2.Edit

    Die DLL sollte mit jedem Programm/Compiler zu erstellen sein, problemlos in C/C++


    /3.Edit

    Wenn man nicht mehrere identische Scripte starten will, dann kann man auch das Beispiel hier nehmen: RE: Kommunikation Skripte untereinander

    Das "Startscript" reserviert per DllStructCreate Speicher und in anderen Scripten/Programmen wird per _WinAPI_ReadProcessMemory() darauf zugegriffen.

    Um den Pointer aus dem Startscript zu erhalten, könnte man bspw. auch ein (unsichtbares) Control im Startscript erstellen und aus diesem die Daten auslesen.