2 Profanprozesse - 1 Speicherbereich

  • Hallo, ich frickel an einem Problem rum, daß ich eigentlich für recht einfach hielt - aaaber...
    Aus einem Hauptprogramm starte ich einen weiteren Prozess, den ich selbst geschrieben & als .prc kompiliert habe.
    Als Parameter übergebe ich dem 2. Prozess die Adresse eines zuvor gefüllten Speicherbereiches.
    Diesen Speicherbereich soll dann der 2. Prozess auswerten & ggf. etwas anderes hineinschreiben. Aber schon das Auslesen will mir einfach nicht gelingen, ich sehe aber nicht den Grund dafür.
    Von der Logik her ist doch alles korrekt, aber irgendwo ist da ein Denkfehler.
    Hab mal 2 Testcodes gebaut, die eigentlich funzen sollten - tun sie aber nicht:(

    Code1: das Hauptprogramm (als .exe kompilieren)

    Code2: der zweite Prozess (als .prc kompilieren)

    Habt ihr 'ne Idee, warum das nicht so geht & vor allem: wie es gehen könnte?

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

    Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden

    Hinweis:

  • Die PRC nimmt die EXE als Runtime für einen neuen Prozess. Zwei unterschiedliche Prozesse habe generell getrennte Speicherbereiche.
    Filemapping verwenden oder ReadProcessMemory nehmen.:

  • AHT hat vollkommen recht!

    Schau Dir in der aktuellen XProfan-Hilfe mal Kapiel 28.13 - File-Mapping - Speicherdateien an! Da findest Du ein kleines Beispiel, dass zu Deinem Problem passt! (Ab XProfan X2)

    Gruß
    Roland

    AMD Ryzen 5 5600U with Radeon Graphics 2,3 GHz / 32 GB RAM / 500 + 2000 GB SSD / Windows 11 - XProfan X4a

    Als Backup: MD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4

    http://www.xprofan.de

  • Hi,
    also das mit dem Speicherdateien funzt prima. Feine Sache;)

    jens, deine Demos kamen wie gerufen. Ich war schön mächtig am grübeln, wie ich meinen Prozess jetzt sage, das was neues in der SpeicherMap steht - Werde das auch so mit dem Messages, wie in deiner Demo lösen.
    War sehr hilfreich, deine Demo - Danke :)
    Mit den Messages tu ich mich immer ein wenig schwer, weil es wenig in deutsch dazu gibt. Ich schnapp meistens irgendwo was deutsches auf (wie jetzt) und probier dann damit so lange rum, bis es passt...

    PS: warum dieses

    Code
    ~UnmapViewOfFile(hMem&)

    ?
    ich habs bei mir (wie in der Hilfe empfohlen) mit Dispose + ~CloseHandle() gemacht..

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

  • Zitat von JörgG;976984


    PS: warum dieses

    Code
    ~UnmapViewOfFile(hMem&)

    ?
    ich habs bei mir (wie in der Hilfe empfohlen) mit Dispose + ~CloseHandle() gemacht..


    Das ist die API-Variante, mit XProfan geht es so:
    FileMap("Close", H)
    aber bitte nicht mit Dispose oder CloseHandle ;)

  • Zitat

    Das ist die API-Variante, mit XProfan geht es so:
    FileMap("Close", H)


    ja ok, mit X2 (damit programmier ich ja zu Hause, diese Anwendung mach ich grad für meine Arbeitsstelle)

    Zitat

    aber bitte nicht mit Dispose oder CloseHandle


    aber in 11.2 geht nur so (damit programmier ich auf Arbeit)
    also mit Dispose geb ich den Speicherbereich für die Speicherdatei frei & mit ~CloseHandle() geb ich das Handle für diese Speicherdatei in Windows frei (so hab ich's interpretiert)

    Aber ich werd meinem Chef mal bitten, auf X2 upzugraden - ich werd sonst ganz wirre;)

    hab mich halt über das:

    Code
    ~UnmapViewOfFile(hMem&)


    gewundert, weil es irgendwie vom Beispiel in 11.2 abweicht, aber egal, es löppt ja jetzt. Die X2 Variante kann ich erst verwenden, wenn ich auf Arbeit auch X2 habe (ich arbeite dran;))

    Mal jetzt ein wenig Offtopic:
    Ich laß ja mehrere .prc's über einer Runtime laufen. Find ich ja auch cool:D
    Jetzt die technische Frage: Wird die Ablaufgeschwindigkeit der einzelnen Prozesse dadurch langsamer gegenüber der Variante mit mehreren Runtimes?
    Die Runtime muß ja jetzt für mehrere Prozesse schuften - oder hab ich da 'ne falsche Vorstellung?

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

  • bin jetzt verwirrt, so stehts in Hilfe von 11.2 - Kap. 29.2.5 - Prozesskommunikation mit Speicherdateien:

    Zitat

    Es können, wie hier im Beispiel, Strings übergeben werden, aber auch jede andere Art von Variablen. Es ist zu beachten, dass die Handles mit CloseHandle am Ende wieder freigegeben werden müssen, auch das Dispose ist nicht zu vergessen


    Was passiert denn, wenn ich sicherheitshalber beides mach?:-) Bevor ich da irgendwelche Speicherleaks produziere, weil ich die .prc's öfter starte & beende...

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

  • Dann mach eben beides ;)
    Der Speicher wird aber nicht von XProfan erstellt und Dispose sollte überflüssig sein. Evtl. ist es erforderlich wenn Bereichsvariablen genutzt werden, weil
    Roland dann da evtl. mitwirkt :D, keine Ahnung, UnmapViewOfFile ist aber wichtig,
    weil nur damit wird der Speicher freigegeben, und das auch erst, wenn alle Mitnutzer, sowie der
    Ersteller den Speicher freigegeben haben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!