Deutsch
SDK-Helfer/ Tools

JRPC neuer Präkompiler für XProfan X4 - JRPC3

 
- Seite 1 -



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)
*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)
*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
*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)
*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

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 "geerbte" 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 auch funktioniert, die jeder so ihre Eigenheiten haben.

Fehlermeldungen und Verbesserungsvorschläge gerne an jreumsc@web.de oder hier im Forum.

Beste Grüße, Jens-Arne

2.238 kB
Bezeichnung:JRPC3
Version:9.22
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Ladeanzahl239
Herunterladen
1.699 kB
Bezeichnung:XProfEd_JR
Version:5.2
Kurzbeschreibung: Alte Version ohne AutoComplete zur Sicherheit
Hochgeladen:15.02.2021
Ladeanzahl149
Herunterladen
3.449 kB
Bezeichnung:JRPC3
Version:9.22
Kurzbeschreibung: ZIP-Datei statt Installer
Hochgeladen:02.04.2021
Ladeanzahl201
Herunterladen
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
16.02.2021  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Seite 15 -



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 X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
24.09.2022  
 



 
- Seite 23 -



Walter
Danke!
 
vor 13 Tagen  
 



 
- Seite 24 -



Jens-Arne
Reumschüssel
Ich habe mir jetzt den Funktionsaufruf der DLL nochmal genauer angesehen. In der readme-Datei steht:

?_Hash(Datei$ | bereich#,Algorithmus$[[,start&],size&])

Die Funktion "testit" wird nicht beschrieben, sie ist aber die einzige Funktion, die die DLL exportiert. Vermutlich ist der letzte Parameter "start&", denn sonst würde "0" keinen Sinn machen. In diesem Fall wäre eine Typumwandlung von chr$(0) in einen String-Pointer auf einen String mit einem Null-Byte tödlich, weil da irgendein riesiger Integerwert rauskommen würde (eben die Adresse auf den String). Eine Integer-Zahl wie "0" scheint daher die einzig sinnvolle Variante zu sein. Warum es mit DEF trotzdem funktioniert, ist mir ein Rätsel.

Vielleicht ist es genau andersherum: bei DEF wird nicht in einen String-Pointer umgewandelt, bei external schon. Wie auch immer, da sollte ein numerischer Wert stehen, kein String.

Gruß, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 13 Tagen  
 




Walter
OK!
Habe 0 reingeschrieben - und es läuft!
Diese DLL habe ich auf der Erzeuger-Homepage www.paehl.de/ auch nicht mehr gefunden.
Da sie aber gut funktioniert, setze ich sie weiterhin ein.
Danke!
 
vor 12 Tagen  
 




Jens-Arne
Reumschüssel
Probier mal dieses kleine Programm aus:

{$NoExternal2CallConversion}
{$NoDef2ExternalConversion}
{$SetFbDllName Test_fbprocs}

DEF fbTestProc2(1) !"Test_fbprocs.dll","FBTESTPROC@4"

fbPROC fbTestProc(byval i as integer) as integer Export
return i
ENDPROC

cls
print "Direktaufruf: "+@str$(fbTestProc(chr$(0)))
print "via External: "+@str$(@external("Test_fbprocs.dll","FBTESTPROC@4",chr$(0)))
print "via Call: "+@str$(@call(@GetFbProcAddr("fbTestProc"),chr$(0)))
print "via DEF: "+@str$(@fbTestProc2(chr$(0)))
waitinput
end

Daran wird klar, dass alle Funktionsaufruf-Methoden immer korrekt nach interner Typumwandlung die Adresse eines Strings übergeben, der chr$(0) enthält, nur DEF nicht. DEF übergibt unkorrekt 0.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 11 Tagen  
 




Walter
Glaub Dir das voll!

Ausprobieren geht aber nicht, da sich das Ding im Präcompiler auf nimmer Wiedersehen verabschiedet.

Brauche ich dazu die Test_fbprocs.dll?

25 kB
Hochgeladen: vor 9 Tagen
Ladeanzahl2
Herunterladen
 
vor 9 Tagen  
 




Jens-Arne
Reumschüssel
Also das ist merkwürdig. Ich kann das problemlos starten, auch mit "<Tilde><Tilde>temp<Tilde><Tilde>.prf" als Dateiname. Daher wieder die zugegebenermaßen etwas hilflose Frage: Hast Du die neuste Version von JRPC3 benutzt? Sonst wüsste ich nicht, woran das liegen könnte. Und die Datei Test_fbprocs.dll wird ja gerade erst durch das Programm erzeugt, die musst Du also nicht vorher haben.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 8 Tagen  
 




Walter
Sooooo ... geschafft.
Problem war wahrscheinlich, dass ich die Source nicht gespeichert hatte (?).
Jedenfalls ist es nach dem Speichern nun gelaufen - und ich sehe das Ergebnis!

Jetzt muss ich mich noch mit freebasic beschäftigen, um auch eigene DLLs erzeugen zu können!

Doch gleich die nächste Frage : Warum wird beim call-Aufruf ein anderes i zurückgegeben als beim Direktaufruf und beim external?
Sollte doch der Wert derselben Adresse sein?

4 kB
Hochgeladen: vor 7 Tagen
Ladeanzahl3
Herunterladen
 
vor 7 Tagen  
 




Jens-Arne
Reumschüssel
Nein, das ist der Trick dabei: Bei jeder Übergabe von chr$(0) wird von XProfan intern ein neuer String erzeugt und dessen Adresse übergeben. Direkt nach Rückkehr der DLL-Funktion wird der String mit Sicherheit sofort wieder freigegeben. Daher hat jeder Aufruf eine andere, zufällige String-Adresse.

Das ist sogar bei XProfan-Strings selbst der Fall. Jedes Mal, wenn Du einem String einen neuen Inhalt zuweist (selbst wenn es derselbe ist wie vorher), steht der String danach an einer ganz anderen Speicheradresse. Intern wird ja immer genau so viel Speicher angefordert, wie für die Länge des Strings erforderlich ist. Und da diese Länge variabel ist, wird das bei jeder Zuweisung neu vorgenommen. Deshalb ist das Arbeiten mit übergebenen Strings in fb-/pbPROCs so kompliziert, weil die Speicheradresse von Strings variabel ist, im Gegensatz zur Speicheradresse von z.B. Integer-Variablen.

Beispiel:
declare s$
cls
s$="123"
print @addr(s$)
s$="123"
print @addr(s$)
waitinput
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 7 Tagen  
 




Jens-Arne
Reumschüssel
Version 9.17a verfügbar:

{$WrapDlls} eingeführt. Damit werden die von fb-/pbPROCs erzeugten DLLs direkt in die XProfan-Exe-Datei integriert, sodass sie nicht mehr mitgeliefert werden müssen. Siehe Hilfe-Datei zu Kompilerdirektiven --> {$WrapDlls}.

Beste Grüße, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 7 Tagen  
 




Walter
Ok, danke für die Erklärung!
 
vor 7 Tagen  
 




funkheld
Geht das bitte auch für Purebasic?

Danke.
gruss
 
vor 4 Tagen  
 




Jens-Arne
Reumschüssel
Hallo funkheld,

ja. Man kann sogar FreeBasic und PureBasic nebeneinander benutzen, wenn man möchte. Dann werden mit {$WrapDlls} beide DLLs in das Profan-Programm eingebaut.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 4 Tagen  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

21.001 Betrachtungen

Unbenanntvor 0 min.
Thomas FreierHeute (00:05)
Jens-Arne ReumschüsselGestern (19:14)
funkheldGestern (17:55)
p.spechtVorgestern (15:10)
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie