| |
|
|
- Seite 1 - |
|
![Jens-Arne Reumschüssel: 16.02.2021](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Guten Abend zusammen,
ich bin kürzlich über das Problem gestolpert, dass XPSE eine ziemlich große Quelldatei von mir nicht mehr verarbeiten konnte. Variablen wurden plötzlich als nicht definiert gemeldet und andere "erratische" Probleme mehr. Ich könnte mir vorstellen, dass dies daran liegt, dass XPSE Schlüsselworte in Windows-Atoms verwaltet. Da ist irgendwann Schluss (bei irgendwas zwischen 60.000 und 70.000 Stück, wobei man bedenken muss, dass XPSE die Windows-API mit vorhält). Vielleicht ist es aber auch etwas ganz anderes, ich kann ja nicht in den "Maschinenraum" von XPSE schauen.
Jedenfalls blieb mir, da XPSE nicht mehr gepflegt wird, nichts anderes übrig, als das nachzubauen. Das Ergebnis ist JRPC3.
----- Features:
*vernünftige Meldung von Fehlern *direkte Anzeige des Programmablaufes in XProfEd (sofern der unten erhältliche aufgebohrte XProfEd verwendet wird) *Umsetzung der alten Profan-Syntax für Operatoren und alte Containerfunktionen *extrem schnelle native fbPROCs, sofern man FreeBasic installiert hat (kostenlos, siehe Hilfe) *mit fbPROCs kann zudem Inline-Assembler auch vor XProfan X4 realisiert werden *extrem schnelle native pbPROCs, sofern man PureBasic installiert hat *Echtzeitverfolgung von Variableninhalten *einfache Zeitmessungen im Programmablauf *Profan-Kompilerdirektiven funktionieren endlich vernünftig (z.B. Verschachtelung) *eingebettete Variablen funktionieren auch mit Arrays *die meisten WIN32-API-Funktionen sind bereits vordefiniert mitgeliefert *API-Aufrufe über @external(...) werden automatisch in @call(...)-Aufrufe umgesetzt *Einrückungsanalyse zum Finden von vertrackten Verschachtelungsfehlern *Klammeranalyse zum Finden von vertrackten Klammerfehlern *ENUMERATE-Funktionalität *Assert zur Fehlerkontrolle *es können beliebige DLLs in die XProfan-EXE integriert werden, sodass sie nicht mit ausgeliefert werden müssen (siehe {$WrapDll}) *einfaches Killen von mit JRPC3 gestarteten Programmen (interpretiert, .prc gestartet, .exe gestartet) *extrem schnell (und daher natürlich nicht in XProfan geschrieben, da eine interpretierte Sprache hierfür naturgemäß viel zu langsam ist) *beim Start von JRPC3 bereits vorhandene .prc-Dateien können zum Starten und Linken genutzt werden (es wird ein Hinweis angezeigt, dass es sich um ein altes Kompilat handelt) *der Profan-Compiler kann zur Beschleunigung mit hoher Prozessorpriorität aufgerufen werden *eingebauter Update-Checker mit Download, falls es ein Update gibt (Hilfe --> online nach Updates suchen) *64- oder 32-bit-Version verfügbar (einfach JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten) - Achtung, die 64-bit-Version erzeugt natürlich keine 64-bit-XProfan-Programme, da XProfan das nicht kann, sondern JRPC3 selbst wird als 64-bit-Programm ausgeführt *XProfan X4-Syntax verfügbar (möglicherweise noch nicht alles, da ich vermutlich nicht alles davon benutze, aber ich habe mich um Vollständigkeit bemüht - jedenfalls sind z.B. HASH-Arrays und QUADINTs dabei) *Interpreter, PRCs und EXEs können mit Kommandozeilenparametern ausgeführt werden *Interpreter, PRCs, EXEs und XPSE können mit Administratorrechten ausgeführt werden *Prozeduren, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten Datei entfernt, um die Dateigröße des Kompilats möglichst klein zu halten *Variablen, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten Datei entfernt, um die Dateigröße des Kompilats möglichst klein zu halten und den Speicherverbrauch zu optimieren *nPROCs aus XPSE werden automatisch mit XPE zu einer DLL umgesetzt und die Aufrufe der nPROCs im Programm entsprechend angepasst, sofern XPSE vorhanden ist *fast alles aus XPSE funktioniert auch in JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime und Compiler festlegen, Shorties, ...) *XProfEd_JR mit Quelltext-AutoComplete *XProfEd_JR mit Quelltext-Memory-Funktion (Markierungen, zu denen zurückgesprungen werden kann)
Einschränkungen: -kein XPSE-Inline-Assembler, wohl aber XProfan-Inline-Assembler (darin allerdings keine Prüfungen auf Korrektheit des Codes) -ABER: man kann XPSE aus JRPC3 heraus aufrufen, sodass diese Funktionalität weiterhin verfügbar ist, sofern man XPSE besitzt (neuer Shorty: {$x}) -Variablen, die in einer Prozedur nicht deklariert sind, sondern "aus der aufrufenden Prozedur übernommen werden", sind standardmäßig nicht zugelassen (XProfan erlaubt das, aber so etwas ist genauso tödlich wie GOTO-Anweisungen). Bitte alle zu nutzenden Inputs als Parameter übergeben, und wenn etwas aus dem aufrufenden Programmteil verändert werden muss, beim Aufruf als Parameter z.B. @addr(x&) verwenden und in der Prozedur parameters x# und LONG x#,0=y& nutzen. Wenn man aber unbedingt "vererbte" Variablen nutzen möchte, kann man dies mit der Kompilerdirektive {$Declare...} tun.
*als Hommage an XPSE lautet die Endung der Ausgabedatei ".enh3"
Eine genauere Erläuterung der einzelnen Features ist der chm-Hilfedatei zu entnehmen, die im Programm unter Hilfe --> Hilfedatei anzeigen oder mit F1 verfügbar ist.
----- /Features
Herunterladen und installieren: JRPC3 kann unten heruntergeladen werden (setup_jrpc3.exe oder als ZIP-Datei). Als Installationsverzeichnis bitte das XProfan-Stammverzeichnis angeben, also dasjenige, in dem die Dateien PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ kann die ZIP-Datei heruntergeladen und deren Inhalt manuell ins XProfan-Stammverzeichnis kopiert werden.
Einrichtung: JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten.
Alle Befehle sind mit dem Befehl "h" wie "Hilfe" abrufbar und sollten selbsterklärend sein.
Für viele erweitere Features, die XProfEd betreffen, wie z.B. jenes, die Zeile, in der ein Fehler auftrat, direkt in XProfEd anzeigen zu können, ist der mitinstallierte XProfEd_JR erforderlich. Dafür muss man also XProfEd_JR.exe statt XProfEd.exe als Editor benutzen. Als "goody" gibt es dazu, dass beim Auf- und Zufalten von Programmen ein Fortschrittsanzeiger integriert ist (das kann bei großen Programmen ja bekanntlich ein bisschen dauern).
Es mag sein, dass noch nicht alles perfekt funktioniert. Ich bitte hierfür um Nachsicht. Meine Programme lassen sich umsetzen, aber das muss noch lange nicht heißen, dass dies mit Programmen anderer Autoren, die jeder so ihre Eigenheiten haben, auch funktioniert.
Fehlermeldungen und Verbesserungsvorschläge gerne an jreumsc@web.de oder hier im Forum.
Beste Grüße, Jens-Arne |
![](/intl/i/dw.gif) | 2.583 kB | | Bezeichnung: | JRPC3 | | Version: | 10.27 | | Kurzbeschreibung: | JRPC3-Installer | | Hochgeladen: | 15.02.2021 | | Ladeanzahl: | ![Abruf-Service Ladezählerbild 346](https://xprofan.net/i/coeco.gif) | | | Herunterladen | | | | 1.699 kB | | Bezeichnung: | XProfEd_JR | | Version: | 5.2 | | Kurzbeschreibung: | Alte Version ohne AutoComplete zur Sicherheit | | Hochgeladen: | 15.02.2021 | | Ladeanzahl: | ![Abruf-Service Ladezählerbild 216](https://xprofan.net/i/uoeco.gif) | | | Herunterladen | | | | 3.765 kB | | Bezeichnung: | JRPC3 | | Version: | 10.27 | | Kurzbeschreibung: | ZIP-Datei statt Installer | | Hochgeladen: | 02.04.2021 | | Ladeanzahl: | ![Abruf-Service Ladezählerbild 285](https://xprofan.net/i/canvo.gif) | | | Herunterladen |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 16.02.2021 ▲ |
|
|
|
| |
|
- Seite 21 - |
|
![](.././../../i/hr.gif) |
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Seite 15 - |
|
![Jens-Arne Reumschüssel: 24.09.2022](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Es gibt eine neue Version, die anders mit dem internen Messagehandling umgeht. Bitte probier die mal aus. Vielleicht ist das Problem damit behoben. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 24.09.2022 ▲ |
|
|
![](.././../../i/hr.gif) |
|
|
![funkheld: 08.05.2023](.././../../i/a/noavatar.gif) funkheld | Hallo danke für deine Arbeit , das hört sich mit Purebasic gut an.
Werden von Purebasic auch eine DLL erstellt wie bei Freebasic?
Danke für deine Hilfe.
Werde es testen wie es sich verhält. Ich spiele seit 10 Jahren mit Purebasic.
Das FreeBasic eine Schwierigkeit hat bei Neueinsteigeren , gebe ich dir recht. Das Freebasic kenne ich auch gut , aber so richtige Freundschafft ist nicht zustande genommen.
Gruss |
|
|
| |
|
|
|
![funkheld: 08.05.2023](.././../../i/a/noavatar.gif) funkheld | Warum wird bitte jedesmal der Purebasiccompiler rausgeschmissen?
Kommt immer die Meldung das der PB-Compiler nicht gefunden wird .
Danke. |
|
|
| |
|
|
|
![funkheld: 09.05.2023](.././../../i/a/noavatar.gif) funkheld | hm... ![](.././../../i/s/eusa_think.gif) |
|
|
| |
|
|
|
![Jens-Arne Reumschüssel: 09.05.2023](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Hallo Funkheld,
mein erstes Problem ist, dass ich offensichtlich tatsächlich keine Emails mehr bekomme, wenn hier jemand etwas schreibt. Keine Ahnung, warum das so ist. Deshalb können sich meine Antworten leider etwas verzögern.
Ansonsten: Ja, die pbPROCs erzeugen ebenfalls eine DLL, genau wie die fbPROCs. Warum bei Dir der Compiler nicht gefunden wird, erschließt sich mir im Moment nicht. Du musst in den Optionen von JRPC3 den 32-bit-Compiler von Purebasic angeben. Dann sollte der auch gefunden werden. Er heißt pbcompiler.exe. Dafür muss man neben der 64-bit-Version natürlich auch die 32-bit-Version von Purebasic installiert haben. Wenn das alles soweit in Ordnung ist und immer noch Probleme auftauchen, bräuchte ich bitte einmal einen Screenshot.
Beste Grüße, Jens-Arne |
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 09.05.2023 ▲ |
|
|
|
|
![funkheld: 09.05.2023](.././../../i/a/noavatar.gif) funkheld | Hier mal die Fotos. 1. PB-Compiler (32Bit) eingegeben.
2. Die Antwort kommt dann , PB-Compiler nicht da.
Schaue ich rein ist das Eingabefeld von PBasic leer.
ist das ! richtig zum Starten des Compiliers.
Gruss |
|
|
| |
|
|
|
![funkheld: 09.05.2023](.././../../i/a/noavatar.gif) funkheld | Noch ein Fehler.
Danke. gruss |
|
|
| |
|
|
|
![Jens-Arne Reumschüssel: 10.05.2023](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Danke für die Screenshots! Puh, das war ein böser Fehler bei der Bearbeitung von INI-Dateien. Ich hoffe, der ist jetzt behoben. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 10.05.2023 ▲ |
|
|
|
|
![funkheld: 10.05.2023](.././../../i/a/noavatar.gif) funkheld | Danke. Diese PB mit dem Strings funktioniert.
Aber dieses mit einer Übergabe und Print...funktioniert nicht.
Danke für deine tolle Arbeit , tolle Leistung.
Vielleicht könntest du das mit Variblenübergabe und Rückgabe von Ergebnissen erklären. Und das mit Bereichsübergaben bzw Daten mit PB in den Bereich reinschreiben die man dann mit Pofan wieder lesen kann.
Die Typen der Variablen für PB und Profan sind mir nicht klar.
Gruss
declare ProfVar1% Shared'Nur globale Variablen! Keine Strings, Arrays, Bereichs- und Hashvariablen!
pbPROC TestProc()
ProfVar1%=ProfVar1%+1'die globale XProfan-Variable "ProfVar1%" ist direkt in der pbPROC verfügbar; sie wird direkt manipuliert, d.h. Änderungen sind im XProfan-Programm sichtbar
ENDPROC
ProfVar1%=1
TestProc()
print ProfVar1%'ergibt 2
|
|
|
| |
|
|
|
![Jens-Arne Reumschüssel: 11.05.2023](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Hmm... Es ist mir fast ein bisschen peinlich, das zuzugeben: Da waren bei der Umsetzung Peek und Poke vertauscht. Jetzt geht's. Danke für den Report!
Zu den Variablentypen schreibe ich gleich was. |
|
|
| XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 11.05.2023 ▲ |
|
|
|
|
![Jens-Arne Reumschüssel: 11.05.2023](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Zu den Variablentypen:
Die Nutzung von Hauptprogramm-Variablen in einer pbPROC (oder auch fbPROC) geht grundsätzlich nur über deren Adresse. Daher können nur solche Variablen mit Shared übergeben werden, die einen festen Speicherplatz besitzen, der sich über die gesamte Programmlaufzeit nicht ändert. Das ist z.B. bei Integervariablen der Fall. Nicht jedoch z.B. bei Strings, denn die bekommen bei jeder neuen Zuweisung von Text einen ganz neuen Speicherplatz, weil sich die Länge ja ändern kann. Bereichsvariablen wiederum haben zwar einen festen Speicherplatz, aber PureBasic kann nicht wissen, wie und womit die gedimt wurden. Das kann z.B. auch eine Struktur sein. Sowas bekommt man nicht automatisch "rüber". Auch bei Arrays weiß PB nicht, wie das definiert ist (wie viele Dimensionen, wie groß).
Für alles, was nicht mit Shared funktioniert, muss man also händisch dafür sorgen, dass die pbPROC weiß, was wo steht und wie darauf zugegriffen werden muss. Für Strings übergibt man also die Adresse und sorgt in PB dafür, dass ein ASCII-String gelesen wird, kein Unicode-String, wie es in PB standardmäßig der Fall ist. Wenn man einen String zurückgeben möchte, muss man auch hierfür einen Pointer übergeben und dafür sorgen, dass der Bereich, auf den er zeigt, für das Ergebnis groß genug ist.
pbPROC StringTest(*in,*out) Protected MeinString$ MeinString$=PeekS(*in,-1,#PB_ASCII) PokeS(*out,"Teststring",-1,#PB_ASCII) ;Rückgabe ENDPROC
Wenn man viele Strings übergeben möchte, kann man deren Adressen in eine einzige Stringvariable schreiben und in der pbPROC wieder extrahieren:
declare s1$,s2$,s3$,uebergabe$,back#
pbPROC StringTest(*uebergabe,*out) Protected s1$,s2$,s3$,uebergabe$,s4$ uebergabe$=PeekS(*uebergabe,-1,#PB_ASCII) s1$=PeekS(val(StringField(uebergabe$,1,"|")),-1,#PB_ASCII) s2$=PeekS(val(StringField(uebergabe$,2,"|")),-1,#PB_ASCII) s3$=PeekS(val(StringField(uebergabe$,3,"|")),-1,#PB_ASCII) s4$=s1$+" "+s2$+" "+s3$ PokeS(*out,s4$,-1,#PB_ASCII) ENDPROC
cls s1$="String 1" s2$="String 2" s3$="String 3" uebergabe$=@str$(@addr(s1$))+"|" uebergabe$=uebergabe$+@str$(@addr(s2$))+"|" uebergabe$=uebergabe$+@str$(@addr(s3$)) dim back#,1000 'groß genug machen StringTest(@addr(uebergabe$),back#) print @string$(back#,0) dispose back# waitinput end
|
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 11.05.2023 ▲ |
|
|
|
|
![Jens-Arne Reumschüssel: 11.05.2023](.././../../i/a/171494484748f1e66bd153d.jpg) Jens-Arne Reumschüssel | Wenn man nur einmal bestimmte Dinge übergeben möchte, die dann in allen pbPROCs zur Verfügung stehen, dann kann man das mit globalen PB-Variablen tun. Alles, was zwischen PBGLOBAL und PBENDGLOBAL steht, wird in den Haupttext der DLL geschrieben, ist also global. Dort sollten nur Variablendeklarationen stehen, kein "richtiger" Code. Ich gebe globale Variablen immer einen führenden Unterstrich, damit man globale und lokale Variablen besser auseinanderhalten kann, aber notwendig ist das natürlich nicht:
declare _Name$,_Alter%
PBGLOBAL Global _Name$,_Alter.i ENDPBGLOBAL
pbPROC GetGlobalVars(*name,alter.i) _Name$=PeekS(*name,-1,#PB_ASCII) _Alter=alter ENDPROC
pbPROC pbPROC1() MessageBox_(0,"pbPROC1:"+chr(13)+_Name$,str(_Alter),0) ENDPROC
pbPROC pbPROC2() MessageBox_(0,"pbPROC2:"+chr(13)+_Name$,str(_Alter),0) ENDPROC
cls _Name$="Max Mustermann" _Alter%="55" GetGlobalVars(@addr(_Name$),_Alter%) pbPROC1() pbPROC2() waitinput end
|
|
|
| XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 11.05.2023 ▲ |
|
|
|
|
![funkheld: 11.05.2023](.././../../i/a/noavatar.gif) funkheld | Hallo, danke für deine Hilfe.
Wenn du noch weitere Ideen hast die man braucht für PB dann bitte immer her damit.
Eine Bereichsvariable mit 1000 Integer möchte ich alle mit 6 einzeln Multiplizieren in PB und wieder zurückschreiben in die Bereichsvariable.
Wie geht das bitte?
Wie geht das mit Float-Variablen ?
Oder muss eine neue Bereichsvariable erstellt werden? Was ist da pracktischer ?
Danke für deine Hilfe.
Gruss |
|
|
| |
|
|