1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. XProfan-Stammtisch

Execute S

  • H.Brill
  • 22. Juli 2025 um 09:00
  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 23. Juli 2025 um 18:53
    • #21

    DLLs sind ausführbarer nativer Code, real gesehen, EXEs, nur mit verändertem Header. Die werden nicht irgendwie in den Code eingebaut. Im Prinzip brauchst Du eine DLL gar nicht einzubinden. Du kannst auch jede Funktion mit CALL aufrufen, wenn Du die Adresse kennst. Um die Adresse zu bekommen, gibt es die Funktion GetProcAdres. Allerdings muß die DLL natürlich trotzdem erst mal in den Speicher geladen und initialisiert werden.

    Gruß Volkmar

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 23. Juli 2025 um 19:18
    • #22

    Die DLLs waren ja nur als als Beispiel gedacht, ob es auch dynamisch evtl. machbar wäre.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 23. Juli 2025 um 19:30
    • #23

    Du kannst doch Compilate ausführen.

    S = MeinPRC [ + " " + Parameter [+ " " + Parameter ...]]

    Shell Par$(0), S

    Läßt sich auch so einrichten, daß Du beim Erstellen gar nicht wissen mußt, welche PRCs jemals vorhanden sein werden. Mit FindFirst FindNext zur Laufzeit alle PRCs im entsprechenden Ordner auflisten und als Menü darstellen. Ausgewälter Menüpunkt bastelt die Zeile S = passend zusammen.

    Gruß Volkmar

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 08:55
    • #24

    Gut zu wissen das mit dem Par$(0). Könnte man mal brauchen.

    Man muß nur aufpassen, ob man sich im Interpreter oder im Compiler (fertiges Programm) befindet. Ein Par$(0) beim Erzeugen und Ausführen hat fatale Folgen. Da kommt ein ganz schnell aufpoppendes Fenster, das sich nicht mal mit dem Taskmanager abschießen ließ. Mußte den PC ganz runter fahren.

    Ich habe es jetzt so gemacht :

    Code
    Declare String s
    Cls
    $IFDEF INTERPRETER
     s = "Grid1.prf"
     Shell Par$(0), S
    $ENDIF
    $IFDEF COMPILER  
     s = "Grid1.prc"
     Shell Par$(1), s
    $ENDIF
    WaitKey
    End
    Alles anzeigen

    Problem ist jetzt nur, daß der Dateiauswahldialog beim Interpreter kommt, obwohl ich beide Dateien (Grid1.prf und Grid1.prc) in den Profanordner und auch in den Quellcode-Ordner kopiert habe. Normalerweise müßten die Dateien ja gefunden werden.

    Bei der COMPILER Direktive verlangt es einen Kommandozeilenparameter, der hier in diesem Falle ja die Variable s ist.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 24. Juli 2025 um 09:06
    • #25

    Ja, das war nur ein Denkanstoß, kein fertiger Code. Man muß schon aufpassen. Nur in einer EXE ist es das aufrufende Programm. Und dann muß ein Compilat gerufen werden. Im Interpretermodus sieht das ganz anders aus. Da ist Par$(0) der Interpreter und Par$(1) der laufende Code. Auch bei den Pfaden muß man aufpassen, ob die richtig sind. Aber machbar ist so eine modulare Programmierung. Und wie Du das schon mit der bedingten Compilierung gemacht hast, kann man damit auch Probleme umgehen :top:

    Gruß Volkmar

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 09:21
    • #26

    So, jetzt hab ichs. Geht mit + statt ,. und ein Blank vorm Dateinamen gehört auch dazu.

    Also, für alle nochmals, die sowas gebrauchen können :

    Code
    Declare String s
    Cls
    $IFDEF INTERPRETER
     s = " Grid1.prf"
     Shell Par$(0) + S
    $ENDIF
    $IFDEF COMPILER  
     s = " Grid1.prc"
     Shell Par$(0) + S
    $ENDIF
    WaitKey
    End
    Alles anzeigen

    Die Variable s muß man halt für sich anpassen.

    Ausschlaggebend ist in der Hilfe bei Par$() dieser Satz :

    Zitat

    Bei der .EXE-Datei versucht das integrierte Runtime-Modul zunächst, den ersten Parameter <par1> als XProfan-Compilat (*.prc) zu interpretieren. Handelt es sich um eine solches, wird es ausgeführt, ansonsten das Programm selbst. Eine PRC-Datei wird auch als solche erkannt, wenn sie eine andere Endung hat.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    Einmal editiert, zuletzt von H.Brill (24. Juli 2025 um 09:26)

  • JörgG
    Stammuser
    Reaktionen
    583
    Beiträge
    1.210
    • 24. Juli 2025 um 13:54
    • #27

    ok, dann wäre der Aufruf der .prc Module ja grob gelöst. Nun könnte man die Kommunikation zwischen Hauptprogramm.exe und den geladenen plugins.prc ganz gut über eine Map Datei regeln. Scheint so am schnellsten und flexibelsten zu laufen. Hab diese Variante auch in Erinnerung, als ich sowas mal gebaut habe. War zwar ein relativ einfacher Zweck mit wenigen Daten, die ausgetauscht werden mußten, aber das Prinzip hat gut funktioniert.

    Aber es ist ja immer noch die Frage offen, ob man mit der reinen Free-Version (die ja keine .exe erzeugen kann) wenigstens eine .prc Datei aus Profancode bauen kann.

    Gruß Jörg

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

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 14:55
    • #28

    Welche Free-Version meinst du denn ? Die 11.2a oder das Freeprofan mit Lazarus ?

    Zumindest mal Profan11.2a, was ich auch installiert habe und ja auch noch downloadbar ist, kann das. Der Compiler heißt da PROFCOMP.EXE. Beim Aufruf (Doppelklick) bietet der eine Dateiauswahl mit *.prf an. Wenn man eine XY.prf gewählt hat macht er automatisch ein XX.PRC. Geht übrigens auch, um Units zu erzeugen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • JörgG
    Stammuser
    Reaktionen
    583
    Beiträge
    1.210
    • 24. Juli 2025 um 15:51
    • #29

    ahhhrrg, ich war auf'm falschen Dampfer. Ich dachte, es gibt zu jeder Vollversion eine Freeversion, mit der man alles machen kann, außer eine .exe zu bauen (zum probieren mit Interpreter halt). Und bei Gefallen könne man auf die Vollversion upgraden. Hat mich damals nicht so gekümmert - hab einmal eine Vollversion gekauft und danch dann die etwas günstigeren Updates bezogen...

    OK - das muß ich irgendwie verwechselt haben.
    Ist dann nicht so optimal, weil ein Interessent, der zB. Lust verspürt, ein Plugin für ein dafür ausgelegtes, fremdes Profanprojekt ja nicht einfach die entsprechende Freeversion runterladen kann, um eine plugin.prc zu erzeugen.
    Hmm, dann ist die Hürde natürlich etwas höher. Frage ist, wie weit aktuelle Profanversionen abwärtskompatibel zu .prc Codes von 11.2a sind.

    Gruß Jörg

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

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 17:45
    • #30

    So eine Freeversion (früher von RGH Schulversion genannt) hatte ich Roland unlängst auch schon vorgeschlagen. Alleine schon deswegen, damit viele die neuen Funktionen ausprobieren können. Das macht er wahrscheinlich nicht. Kann ich mittlerweile auch verstehen : Man packt den Interpreter und eine .prf (z.b. als Ressource) in eine .exe Datei und entpackt beim Start alles wieder. Dann kann man das ja starten : Profan.exe xy.prf. Und schon hat man selber sein ausführbares Programm. Ist zwar etwas langsamer, aber wenn man nicht gerade mit Millisekunden arbeitet, fällt das kaum auf.

    Zitat

    Ist dann nicht so optimal, weil ein Interessent, der zB. Lust verspürt, ein Plugin für ein dafür ausgelegtes, fremdes Profanprojekt ja nicht einfach die entsprechende Freeversion runterladen kann, um eine plugin.prc zu erzeugen.

    Die 11.2a kann ja jeder runterladen, der Lust hat. Ich denke, wenn er den Compiler für solche Zwecke nutzt, ist das ja auch ok. Und abwärtskompatibel ist (X)Profan ja schon immer gewesen, außer den Befehlen/Funktionen, die RGH mal mit der Zeit rausgeworfen hat.

    Und ich habe es jetzt auch mal probiert (allerdings mit X4) und es scheint zu funktionieren.

    Ist mal so ein kleines Profan-Lernprogramm, wo man auch Lektionen in einer Listbox abrufen kann.


    Code
    Declare Handle ME, LB, btn1, btn2
    Declare Long ende, p, String s, datei, prcdatei
    WindowTitle "PRF - Interpreter"
    Window 600, 400
    btn1 = Create("Button", %HWnd, "Ausführen", 10, 10, 120, 25)
    btn2 = Create("Button", %HWnd, "Ende",      10,300, 80,  25)
    Me = Create("MultiEdit",%HWnd, "",          200, 10, 300, 150)
    Create("Text", %HWnd, "Kurse", 10,50, 80, 25)
    LB   = Create("Listbox", %HWnd, 0, 10, 80, 120, 100)
    ende = 0
    datei = $ProgDir + "Test.prf"
    prcdatei = $ProgDir + "Test.prc"
    'MessageBox("Läuft NUR im Interpreter !!!", "Warnung", 0)
    Proc InitME
     AddString(LB, "Variablen")
     AddString(LB, "Arrays")
     AddString(LB, "Schleifen")
     SetText ME, GetText$(ME) + "' Bitte Code eingeben. z.b.\n"
     SetText ME, GetText$(ME) + "CLS\n"
     SetText ME, GetText$(ME) + "Print \qHello World aus dem MultiEdit!\q\n"
     SetText ME, GetText$(ME) + "Print \qBitte Taste drücken...\q\n"
     SetText ME, GetText$(ME) +  "WaitKey\n"
     SetText ME, GetText$(ME) +  "End\n"
    EndProc
    Proc ListboxSelect
    Declare String code
    p = GetCurSel(LB)
    Select p
     CaseOf 0
       code = "Declare a$, b&\nCLS\na$ = \qKarl\q\nb& = 50\nPrint a$, \q ist \q, b&,\q Jahre alt.\q\nPrint \qTaste drücken...\q\nWaitKey"
       SetText ME, ""
       SetText ME, code
     CaseOf 1
       code = "Declare a$[], b&[]\nSetSize a$[],2\nSetSize b&[], 2\na$[] = \qKarl\q,\qMaria\q,\qFelix\q\nb&[] = 10, 20, 30\nCls\nWhileLoop 0, SizeOf(a$[]) - 1\n   Print a$[&LooP],\qist\q, b&[&Loop],\qJahre alt.\q\nEndWhile\nPrint \qTaste drücken...\q\nWaitKey\nEnd\n"
       SetText ME, ""
       SetText ME, code
     CaseOf 2
       code = "Declare a$\na$ = \q\q\nCls\nPrint \qGib einen Namen ein... ende = Ende\q\nWhile a$ <> \qende\q\n   Input a$\n   Print a$\nEndWhile\nPrint \qBitte eine Tase drücken...\q\nWaitKey\nEnd"
       SetText ME, ""
       SetText ME, code
    EndSelect
    EndProc
    
    InitME()
    WhileNot ende
     WaitInput
     If Clicked(btn1)
        s = GetText$(ME)
        If s <> ""
           ClearList
           Move("HandleToList", ME)
           Move("ListToFile", datei)
           $IFDEF INTERPRETER
             s = " " + datei
             Shell Par$(0) + s
           $ENDIF
           $IFDEF COMPILER
             ' Hier könnte das Generieren einer .prc zur Laufzeit stattfinden.
             ' die .prf steht ja datei
             Shell $ProgDir + "Profcomp.exe" + " " + datei
             s = " " + prcdatei
             Shell Par$(0) + s
           $ENDIF
        EndIf
     ElseIf Clicked(LB)
        ListboxSelect
     ElseIf Clicked(btn2)
       ende = 1
     EndIf
    EndWhile
    Alles anzeigen

    Ein Wermutstropfen ist die Messagebox, die der Compiler bei der Fertigstellung bringt. Müßte ich mal beim Kommandozeilenaufruf schauen, ob es da einen Parameter zum Unterdrücken gibt.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (24. Juli 2025 um 17:52)

  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 24. Juli 2025 um 17:53
    • #31

    Mit Kommandozeilenschalter /B sollte die Messagebox nicht angezeigt werden.

    Gruß Volkmar

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 18:28
    • #32

    Den Schalter /B scheint X4 nicht zu kennen. Oder mache ich was falsch ?

    Code
    Shell $ProgDir + "Profcomp.exe /B" + " " + datei

    Das / B wird dann vor die datei geschrieben und die wird dann nicht mehr gefunden.

    Geht auch nicht auf der richtigen Kommandozeile (CMD).

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (24. Juli 2025 um 18:35)

  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 24. Juli 2025 um 18:45
    • #33

    Erst Dateiname und dann /B. Schau mal in der Hilfe unter Einführung - Entwicklungsumgebung - Compiler Da stehen alle möglichen Kommandozeilenschalter.

    Gruß Volkmar

  • JörgG
    Stammuser
    Reaktionen
    583
    Beiträge
    1.210
    • 24. Juli 2025 um 19:20
    • #34
    Zitat von H.Brill

    Ist zwar etwas langsamer, aber wenn man nicht gerade mit Millisekunden arbeitet, fällt das kaum auf.

    hängt immer vom Vorhaben ab - und von den Funktionen, die man benutzt. Und bei großen Datenmengen oder aufwändige Verarbeitung summieren so ein paar Millis schnell zu vielen Sekunden oder gar Minuten.
    Für mich war also zu damaliger Zeit ein Weg über den Interpreter keine Option. Selbst die Lazarus-Variante war für mich nicht schnell genug.
    Natürlich mußte man auch den Code auf maximale Geschwindigkeit gestalten - das war immer mein Lieblingshobby. Und Frank Abbings Listview.dll durfte nicht fehlen ;)
    Und die dbase-Funktionen gabs ja auch nicht bei Lazarus.

    Gruß Jörg

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

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 24. Juli 2025 um 19:48
    • #35

    Danke Volkmar, jetzt geht es.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Jens-Arne
    Schüler
    Reaktionen
    99
    Beiträge
    124
    • 25. Juli 2025 um 14:08
    • #36

    Kleiner Dämpfer: Ich glaube nicht, dass man profcomp.exe einem Programm beifügen darf. Dann braucht derjenige, der es nutzt, ja XProfan nicht mehr zu kaufen, zumal diese Datei auch den Linker enthält. Derjenige, der das PlugIn schreiben will, muss XProfan schon selbst besitzen, und spendiert dann eine .prc-Datei als Erweiterung, die er selbst erzeugt hat. Warum soll das Hauptprogramm das tun können? Wozu haben wir eine IDE?

  • Volkmar
    Moderator
    Reaktionen
    7.026
    Beiträge
    6.942
    • 25. Juli 2025 um 15:45
    • #37

    Warum sollte ein Hauptprogramm nicht eine Schnittstelle haben, die beliebige Erweiterungsmodule einbinden kann. Und wenn es mit der Freeversion 11 funktioniert, ist das doch kein Problem. Und wenn nicht, dann könnte ich als Herausgeber des Programmes auch "Wunschfunktionen" nachträglich einbauen.

    Gruß Volkmar

  • Jens-Arne
    Schüler
    Reaktionen
    99
    Beiträge
    124
    • 25. Juli 2025 um 16:06
    • #38

    Ok, das stimmt. Wenn die Freeware-Version benutzt wird, sollte das in der Tat kein Problem sein.

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 25. Juli 2025 um 17:24
    • #39

    Das, mit der Freewareversion, in diesem Falle 11.2a hatte ich ja bereits genannt. Wenn der Benutzer deines Programmes sich diese erstmal installiert (benutzen muß er sie ja nicht) kann er doch wohl den Compiler für sich privat benutzen ?

    Teile der Version 11.2a (z.b. Compiler usw.) würde ich nicht mitgeben wollen. Auch das Freewarepaket ist ja so, wie es ist und im Sinne des Autors zu downloaden. Wenn ich den Compiler für andere Zwecke, wie etwa für ein anderes Programm privat verwende, so spricht da nichts dagegen.

    Ich würde das so machen, daß der Benutzer meines Programmes sich erst die Freeware downloaden und ggf. installieren muß, damit er an den Compiler kommt.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • H.Brill
    Stammuser
    Reaktionen
    508
    Beiträge
    1.192
    • 2. August 2025 um 14:35
    • #40

    Was mir noch zu den .prc Dateien einfällt :

    Vielleicht könnte man ja auch die bei XProfan beigefügte Leer32.dll als Sammel-Container verwenden. Dort könnte man doch gut die .prc Dateien als RC_DATA einfügen. Den Inhalt kann man in einen Bereich auslesen und als .prc wieder speichern. Auch den Quellcode könnte man ja auch als Stringressource darin festhalten. Das kann man ja leicht mit einem selber geschriebenem extra Tool, das die Daten in die DLL einfügt bzw. verwaltet, erledigen. Hätte den Vorteil, daß die Runtime bzw. .exe nicht sehr viel größer wird (außer halt den Aufruf der Proc). Weiterer Vorteil wäre, wenn der Aufruf mit Parametern der gleiche im Hauptprogramm bleibt, aber man das Innenleben der Proc (in der .prc) etwas verändern möchte, braucht man nur die DLL ändern. Schon hätte man für sein Programm so eine Art Patch gemacht.

    Vielleicht habt ihr ja noch mehr Ideen zu dieser Geschichte.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

Windows 11

Ähnliche Themen

  • Zukunft XProfan

    • Jens-Arne
    • 9. Februar 2024 um 21:58
    • XProfan-Stammtisch
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™