Español
SDK-Helfer/ Tools

JRPC neuer Präkompiler para XProfan X4 - JRPC3

 
- Página 1 -



Jens-Arne
Reumschüssel
Bueno Abend zusammen,

Yo bin kürzlich encima el problema gestolpert, dass XPSE una bastante große Quelldatei de No mehr verarbeiten podría. Variables fueron plötzlich como no definiert gemeldet y otro "erratische" Problemas mehr. Yo podría me vorstellen, dass dies daran liegt, dass XPSE Schlüsselworte en Windows-Atoms verwaltet. Como es irgendwann Schluss (en algo zwischen 60.000 y 70.000 Stück, wobei uno bedenken muss, dass XPSE el Windows-API con vorhält). Tal vez lo aber auch algo bastante más, Yo de hecho puede no en el "Maschinenraum" de XPSE schauen.

Jedenfalls blieb me, como XPSE no mehr gepflegt se, nichts más übrig, como el nachzubauen. Das Ergebnis es JRPC3.

----- Features:

*vernünftige Meldung de Fehlern
*direkte Anzeige des Programmablaufes en XProfEd (sofern el unten erhältliche aufgebohrte XProfEd verwendet se)
*Umsetzung el alten Profano-Syntax para Operatoren y alte Containerfunktionen
*extremo schnelle native fbPROCs, sofern uno FreeBasic installiert ha (libre, siehe Ayuda)
*con fbPROCs kann zudem Inline-Ensamblador auch antes XProfan X4 realisiert voluntad
*extremo schnelle native pbPROCs, sofern uno PureBasic installiert ha
*Echtzeitverfolgung de Variableninhalten
*einfache Zeitmessungen en el Programmablauf
*Profano-Kompilerdirektiven trabajo endlich vernünftig (z.B. Verschachtelung)
*eingebettete Variables trabajo auch con Arrays
*el meisten WIN32-API-Características son ya vordefiniert mitgeliefert
*API-Aufrufe encima @external(...) voluntad automáticamente en @call(...)-Aufrufe umgesetzt
*Einrückungsanalyse para Finden de vertrackten Verschachtelungsfehlern
*Klammeranalyse para Finden de vertrackten Klammerfehlern
*ENUMERATE-Funktionalität
*Assert a Fehlerkontrolle
*lo puede beliebige DLL en el XProfan-EXE integriert voluntad, sodass ellos no con ausgeliefert voluntad necesario (siehe {$WrapDll})
*einfaches Killen de con JRPC3 gestarteten Programmen (interpretiert, .prc comenzó, .exe comenzó)
*extremadamente rápido (y por lo tanto natürlich no en XProfan geschrieben, como una interpretierte Lingua esta naturgemäß viel a langsam es)
*beim Start de JRPC3 ya vorhandene .prc-Archivos puede para Starten y Linken genutzt voluntad (lo se una Referencia adecuado, dass es una altes Kompilat es)
*el Profano-Compiler kann a Beschleunigung con hoher Prozessorpriorität aufgerufen voluntad
*eingebauter Actualización-Checker con Descargar, si lo una Actualización son (Ayuda --> online después de Updates suchen)
*64- oder 32-bit-Versión verfügbar (simplemente JRPC3_64.exe oder JRPC_32.exe como Interpreter en XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] y JRPC3 con F7 starten) - Achtung, el 64-bit-Versión producido natürlich no 64-bit-XProfan-Programas, como XProfan el no kann, pero JRPC3 incluso se como 64-bit-Programa ausgeführt
*XProfan X4-Syntax verfügbar (möglicherweise todavía no alles, como Yo vermutlich no alles su benutze, pero yo habe mich en Vollständigkeit bemüht - jedenfalls son z.B. HASH-Arrays y QUADINTs esta)
*Interpreter, PRCs y EXEs puede con Kommandozeilenparametern ausgeführt voluntad
*Interpreter, PRCs, EXEs y XPSE puede con Administratorrechten ausgeführt voluntad
*Prozeduren, el en el aktuellen Programa zwar enthalten son, pero no verwendet voluntad, voluntad de el umgesetzten Expediente lejos, a Dateigröße des Kompilats möglichst klein a halten
*Variables, el en el aktuellen Programa zwar enthalten son, pero no verwendet voluntad, voluntad de el umgesetzten Expediente lejos, a Dateigröße des Kompilats möglichst klein a halten y el Speicherverbrauch a optimieren
*nPROCs de XPSE voluntad automáticamente con XPE a uno DLL umgesetzt y el Aufrufe el nPROCs en el Programa entsprechend adaptado, sofern XPSE disponible es
*fast alles de XPSE funktioniert auch en JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime y Compiler festlegen, Shorties, ...)
*XProfEd_JR con Ver código fuente-AutoComplete
*XProfEd_JR con Ver código fuente-Memory-Función (Markierungen, a denen zurückgesprungen voluntad kann)

Einschränkungen:
-kein XPSE-Inline-Ensamblador, wohl aber XProfan-Inline-Ensamblador (en él allerdings no Prüfungen en Korrektheit des Codes)
-ABER: uno kann XPSE de JRPC3 heraus aufrufen, sodass esta Funktionalität weiterhin verfügbar es, sofern uno XPSE besitzt (neuer Shorty: {$x})
-Variables, el en uno Procedimiento no deklariert son, pero "aus el aufrufenden Procedimiento übernommen werden", son standardmäßig no zugelassen (XProfan erlaubt el, aber así algo es genauso tödlich como GOTO-Anweisungen). Bitte todos a nutzenden Inputs como Parámetro transferencia, y si algo de el aufrufenden Programmteil verändert voluntad muss, beim Aufruf como Parámetro z.B. @addr(x&) uso y el Procedimiento parámetros x# y LONG x#,0=y& nutzen.
Wenn uno aber necesariamente "vererbte" Variables nutzen möchte, puede ser dies con el Kompilerdirektive {$Declarar...} tun.

*como Hommage a XPSE lautet el Endung el Ausgabedatei ".enh3"

Un genauere Erläuterung el individual Features es el chm-Hilfedatei a entnehmen, el en el Programa bajo Ayuda --> Hilfedatei Mostrar oder con F1 verfügbar es.

----- /Features

Descargar y installieren:
JRPC3 kann unten heruntergeladen voluntad (setup_jrpc3.exe oder como ZIP-Expediente).
Als Installationsverzeichnis Por favor, el XProfan-Stammverzeichnis angeben, also dasjenige, en el el Archivos PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. mentira. Alternativ kann el ZIP-Expediente heruntergeladen y deren Inhalt manuell en el XProfan-Stammverzeichnis kopiert voluntad.

Einrichtung:
JRPC3_64.exe oder JRPC_32.exe como Interpreter en XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] y JRPC3 con F7 starten.

Alle Befehle son con el Befehl "h" como "Hilfe" abrufbar y debería selbsterklärend ser.

Für viele erweitere Features, el XProfEd betreffen, como z.B. jenes, el Línea, en el una Fehler auftrat, direkt en XProfEd Mostrar a puede, es el mitinstallierte XProfEd_JR erforderlich. Dafür muss uno also XProfEd_JR.exe en lugar de XProfEd.exe como Editor benutzen. Als "goody" hay dazu, dass beim Auf- y Zufalten de Programmen una Fortschrittsanzeiger integriert es (el kann en großen Programmen sí bekanntlich una bisschen dauern).

Lo mag ser, dass todavía no alles perfekt funktioniert. Yo Por favor, esta en Nachsicht. Mi  Programas dejar se umsetzen, aber el muss todavía largo no heißen, dass dies con Programmen otro Autores, el cada así ihre Eigenheiten haben, auch funktioniert.

Fehlermeldungen y Verbesserungsvorschläge gerne a jreumsc@web.de oder hier en el Foro.

Beste Grüße, Jens-Arne

2.584 kB
Bezeichnung:JRPC3
Versión:10.29
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Ladeanzahl363
Descargar
1.699 kB
Bezeichnung:XProfEd_JR
Versión:5.2
Kurzbeschreibung: Alte Versión sin AutoComplete a Sicherheit
Hochgeladen:15.02.2021
Ladeanzahl224
Descargar
3.777 kB
Bezeichnung:JRPC3
Versión:10.29
Kurzbeschreibung: ZIP-Expediente en lugar de Installer
Hochgeladen:02.04.2021
Ladeanzahl291
Descargar
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
16.02.2021  
 



 
- Página 23 -


« Dieser Contribución wurde como Solución gekennzeichnet. »

- Página 15 -



Jens-Arne
Reumschüssel
Lo son una neue Versión, el anders con el internen Messagehandling umgeht. Bitte probier el veces de. Tal vez el problema así Fijo.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
24.09.2022  
 




funkheld
Como se el Por favor, en Pb umgesetzt?

nProc getCircP(long r,w)
volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
ENDPROC

Gracias.
Gruss
 
14.05.2023  
 




Jens-Arne
Reumschüssel
Yo denke, así:

declarar r!,w!

pbProc getCircP(*r,*w)
protected r.d,w.d
r=PeekD(*r)
w=PeekD(*w)
procedurereturn sin(0.0174532925199433*w/1000.0)*r
ENDPROC

cls
r!=2
w!=3
imprimir getCircP(@addr(r!),@addr(w!))
waitinput
end

Aber es wirklich sinnvoll, una Integerwert zurückzugeben? Si el no mejor auch una Float ser? So etwa:

declarar r!,w!,resultado!

pbProc getCircP(*r,*w,*resultado)
protected r.d,w.d
r=PeekD(*r)
w=PeekD(*w)
PokeD(*resultado,sin(0.0174532925199433*w/1000.0)*r)
ENDPROC

cls
r!=2
w!=3
getCircP(@addr(r!),@addr(w!),@addr(resultado!))
imprimir resultado!
waitinput
end

Oder todavía einfacher con Shared-Variables:

declarar r!,w!,resultado! shared

pbProc getCircP()
resultado!=sin(0.0174532925199433*w!/1000.0)*r!
ENDPROC

cls
r!=2
w!=3
getCircP()
imprimir resultado!
waitinput
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
14.05.2023  
 




funkheld
Gracias para deine schnelle Ayuda.

Werde lo todavía una vez testen.

Gracias.
 
14.05.2023  
 




Walter
Freue Notifiqueme de JRPC3, habe nun aber una Problema con un array.
JRPC3_64.exe se ejecuta problemlos por, el nachfolgend gestartete Interpreter bricht sin embargo de con "Das Element no existe!".

Wenn Yo el Programa igual en el Profano-Interpreter starte, se ejecuta lo problemlos por.
' Array-Test / Shuffle
' Mischt el Einträge el Listboxliste
cls
randomize
' Listboxliste con Cuerdas füllen
clearlist
addstring(0,"BlaBla1")
addstring(0,"BlaBla2")
addstring(0,"BlaBla3")
addstring(0,"BlaBla4")
addstring(0,"BlaBla5")
listbox$("Start",1)
shuffle()
listbox$("Ergebnis",1)
end
'---------------------

proc shuffle

    '---------------------
    ' Mischt el Einträge el Listboxliste
    declarar anz%
    anz%=getcount(0)
    Declarar i%,nr%,L$[anz%]
    clear L$[]
    i%=0

    Mientras que i% < anz%' Durch el Listboxliste

        nr%=rnd(anz%)' Einen zufälligen Platz en el Array wählen

        mientras que L$[nr%]<>""' ya besetzt? Dann el nächsten freien Platz suchen

            inc nr%
            caso nr%=anz%: nr%=0' si al Ende: de vorne weg neu probieren

        wend

        L$[nr%]=getstring$(0,i%)
        Inc i%

    wend

    clearlist
    move("ArrToList",L$[])

ENDPROC' shuffle


Woran liegt el?
 
15.05.2023  
 




Jens-Arne
Reumschüssel
Das hatte algo así a tun, dass Usted una Array una Variable dimensioniert hast (Declarar ...,L$[anz%]). In diesem Fall necesario kurze Variablennamen y siempre global definierte Variables en JRPC3 ausgeschaltet voluntad, qué nun automáticamente geschieht. Jetzt debería Su Programa also laufen.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
15.05.2023  
 




Walter
Super! Gracias!
 
15.05.2023  
 




Jens-Arne
Reumschüssel
Versión 9.08a:

Map-Daten erzeugen:
Fehler, el während el Umsetzung uno Codes con JRPC3 festgestellt voluntad, voluntad bekanntlich direkt de JRPC3 a el richtigen Punto en el Quellcode adecuado (si la mitglieferte XProfEd_JR genutzt se).
Wenn allerdings a Laufzeit uno Programmes una Fehler auftritt (z.B. una Überschreitung des Dimensionierungsbereichs uno Arrays), son XProfan sólo una knappe Laufzeit-Fehlermeldung de, el aber oft wenigstens una Zeilennummer enthält. Diese Zeilennummer bezieht se sin embargo desafortunadamente en el kumulierten Code, el XProfan abarbeitet, sodass lo fast unmöglich es, el ausgegebene Zeilennummer uno Zeilennummer en el Ver código fuente y dazu auch todavía el richtigen Quelltextdatei (z.B. uno INC-Expediente) zuzuordnen.
Hierbei helfen Map-Daten. Wenn esta Opción aktiviert es, schreibt JRPC3 con, woher jede einzelne Línea des Endcodes en el .enh3-Expediente stammt, sodass el kumulierten Zeilennummern otra vez ihrem Ursprung zugeordnet voluntad puede.
Wenn una XProfan-Laufzeitfehler con uno en él gemeldeten Zeilennummer auftritt, puede ser nun encima el Menü "Datei" --> "Laufzeitfehlerzeile finden" el de XProfan ausgegebene Zeilennummer eingeben y erhält en XProfEd_JR el Línea de el richtigen Quelldatei adecuado, en el el Fehler auftrat.
Das funktioniert allerdings sólo, si vorher en el Optionen de JRPC3 el Map-Daten-Erzeugung aktiviert wurde. Dies kann auch todavía después de Auftreten des Laufzeitfehlers geschehen, sofern el Programmcode no ergänzt oder gekürzt wurde, qué natürlich el ermittelte Zeilennummer beeinflussen sería.
Wenn el Map-Daten gerade no mehr gebraucht voluntad, debería esta Opción otra vez deaktiviert voluntad, porque ellos el Ver código fuente en extremo viele Kommentare erweitert y así el Interpreter de XProfan langsamer macht.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
16.05.2023  
 




Jens-Arne
Reumschüssel
Hier una ausführliches Ejemplo para el Nutzung de fbPROCs para el schnelle Vorgeben de cualquier vielen vordefinierten Wörtern en Editar-Controls.
El Vorgaben posición jeweils en uno GridBox, wobei para verschiedene Editar-Controls diferente GridBoxen verwendet voluntad puede. Lo voluntad fbPROCs verwendet, así no sólo diejenigen, el PureBasic besitzen, el ausprobieren puede.

Ganz al Anfang en FBGLOBAL en #include muss el jeweils zutreffende Pfad angegeben voluntad. Denn lo se el Biblioteca commctrl.bi gebraucht, a API-Konstanten para ListViews benutzen a puede.

declarar _hE%,_hE2%,_hGB%,_hGB2%,_ende%,_s$,_ws#

'{ 'fbPROCs
FBGLOBAL
#include "D:\Programas\FreeBasic\inc\win\commctrl.bi" 'hier muss el richtige Pfad angegeben voluntad
dim shared as integer _MaxNum=0,_MinLaenge=1
redim shared as integer _NumhGB(0 to 1)
redim shared as cadena _OldAktEntry(0 to 1)
dim shared as cadena _KeywordEnders
_KeywordEnders=" .,:-+*/\!;"
ENDFBGLOBAL

fbPROC AmendEditText(byval hE as integer,byval hGB as integer,byval CaseSensitive as integer) as integer export
dim as byte pointer pAktEntry
dim as cadena AktEntry,Vorgabe,s2,AktSubStr,LeftPart,RightPart
dim as integer i,CurPos,erg,num
dim as zstring pointer zs,zs2
'{ 'Nummer el GB ermitteln
num=0
for i=1 to _MaxNum
if _NumhGB(i)=hGB
num=i
exit for
endif
next i
if num=0
_MaxNum=_MaxNum+1
num=_MaxNum
redim preserve _NumhGB(0 to num)
redim preserve _OldAktEntry(0 to num)
_NumhGB(num)=hGB
_OldAktEntry(num)=""
endif
'}
'{ 'aktuellen Eintrag ermitteln
pAktEntry=allocate(10001)
sendmessage(cast(handle,hE),WM_GETTEXT,10000,cast(integer,pAktEntry))
AktEntry=Peek(zstring,pAktEntry)
deallocate(pAktEntry)
'}
if AktEntry<>_OldAktEntry(num)
if len(AktEntry)>len(_OldAktEntry(num))
CurPos=loword(sendmessage(cast(handle,hE),EM_GETSEL,0,0))
'{ 'aktuellen Substring ermitteln
AktSubStr=""
for i=CurPos to 0 step -1
if i>0
if instr(_KeywordEnders,mid(AktEntry,i,1))<>0
LeftPart=left(AktEntry,i)
exit for
más
AktSubStr=mid(AktEntry,i,1)+AktSubStr
endif
más
LeftPart=""
endif
next i
for i=Curpos+1 to len(AktEntry)
if instr(_KeywordEnders,mid(AktEntry,i,1))<>0
RightPart=right(AktEntry,len(AktEntry)-(i-1))
exit for
más
AktSubStr=AktSubStr+mid(AktEntry,i,1)
endif
next i
'}
if len(AktSubStr)>=_MinLaenge
i=LVFindText(hGB,AktSubStr,-1)
if i>=0
Vorgabe=LVGetText(hGB,i)
if CaseSensitive
if left(Vorgabe,len(AktSubStr))=AktSubStr
erg=1
más
erg=0
endif
más
if ucase(left(Vorgabe,len(AktSubStr)))=ucase(AktSubStr)
erg=1
más
erg=0
endif
endif
if erg
if len(AktSubStr)<>len(Vorgabe)
s2=LeftPart+Vorgabe+RightPart
zs=Allocate(len(s2)+1)
poke zstring,zs,s2
sendmessage(cast(handle,hE),WM_SETTEXT,0,cast(integer,zs))
sendmessage(cast(handle,hE),EM_SETSEL,len(LeftPart)+len(AktSubStr),len(LeftPart)+len(Vorgabe))
deallocate(zs)
endif
endif
endif
endif
endif
_OldAktEntry(num)=AktEntry
endif
volver 0
ENDPROC 'AmendEditText

fbPROC SetMinLaenge(byval Laenge as integer) as integer export
_MinLaenge=Laenge
if _MinLaenge<1
_MinLaenge=1
endif
volver 0
ENDPROC 'SetMinLaenge

fbPROC SetKeywordEnders(byval Texto as zstring pointer) as integer export
_KeywordEnders=peek(zstring,Texto)
volver 0
ENDPROC 'SetKeywordEnders

'{ 'Hilfsfunktionen
fbPROC LVGetCount(byval hLV as integer) as integer
volver sendmessage(cast(any pointer,hLV),LVM_GETITEMCOUNT,0,0)
ENDPROC 'LVGetCount
fbPROC LVFindText(byval hLV as integer,byval texto as cadena,byval StartLine as integer) as integer 'search is caso insensitive
dim as LVFINDINFOA LVFI
dim as zstring pointer zs
dim as integer erg
LVFI.flags=LVFI_PARTIAL O LVFI_STRING
zs=allocate(len(texto)+1)
poke zstring,zs,texto
LVFI.psz=zs
erg=sendmessage(cast(any pointer,hLV),LVM_FINDITEM,StartLine,cast(integer,@LVFI))
deallocate(zs)
volver erg
ENDPROC 'LVFindText
fbPROC LVGetText(byval hLV as integer,byval Línea as integer,byval Spalte as integer=0) as cadena
dim as LVITEM LVI
dim as cadena ret,s
dim as zstring pointer LVItemText
'LVI=mask&,iItem&,iSubItem&,state&,stateMask&,pszText&,cchTextMax&,iImage&,lParam&,iIndent&,iGroupId&,cColumns&,puColumns&,piColFmt&,iGroup&
LVItemText=Allocate(2001)
LVI.iItem=Zeile
LVI.iSubItem=Spalte
LVI.mask=LVIF_TEXT
LVI.pszText=LVItemText
LVI.cchTextMax=2000
sendmessage(cast(any pointer,hLV),LVM_GETITEMTEXT,Línea,cast(integer,@LVI))
ret=peek(zstring,LVItemText)
deallocate(LVItemText)
volver ret
ENDPROC 'LVGetText
'}
'}

'*** Hauptprogramm
Ventana de Estilo 1+2+4+8+512
cls
_hE%:=@create("EDIT",%HWnd,"",10,10,300,20)
dim _ws#,1000
widestring _ws#,0="Automarken"
@sendmessage(_hE%,~EM_SetCueBanner,0,_ws#) 'lParam: 0=Hinweis sólo Mostrar, si el Editar campo no el Fokus ha (default); 1=auch Mostrar, si fokussiert
_hE2%:=@create("EDIT",%HWnd,"",10,40,300,20)
widestring _ws#,0="rund en el Fernseher"
@sendmessage(_hE2%,~EM_SetCueBanner,0,_ws#) 'lParam: 0=Hinweis sólo Mostrar, si el Editar campo no el Fokus ha (default); 1=auch Mostrar, si fokussiert
disponer _ws#
_hGB%:=@create("GRIDBOX",%HWnd,"1;0;0",1,0,0,0,0) 'sortiert, así Einträge alphabetisch sortiert vorgegeben voluntad
@sendmessage(_hGB%,~WM_SETREDRAW,0,0) 'beschleunigt el Füllen el Gridbox deutlich, außerdem es ellos sowieso unsichtbar
@addstring(_hGB%,"BMW"):@addstring(_hGB%,"Audi"):@addstring(_hGB%,"VW"):@addstring(_hGB%,"Skoda"):@addstring(_hGB%,"Nissan")
@addstring(_hGB%,"Honda"):@addstring(_hGB%,"Chevrolet"):@addstring(_hGB%,"Mini"):@addstring(_hGB%,"Mercedes")
@addstring(_hGB%,"Opel"):@addstring(_hGB%,"Alfa"):@addstring(_hGB%,"Romeo"):@addstring(_hGB%,"Aston"):@addstring(_hGB%,"Martin")
@addstring(_hGB%,"Bentley"):@addstring(_hGB%,"Bugatti"):@addstring(_hGB%,"Buick"):@addstring(_hGB%,"Cadillac"):@addstring(_hGB%,"Chrysler")
@addstring(_hGB%,"Citroen"):@addstring(_hGB%,"Dacia"):@addstring(_hGB%,"Daihatsu"):@addstring(_hGB%,"Dodge")
_hGB2%:=@create("GRIDBOX",%HWnd,"1;0;0",1,0,0,0,0) 'sortiert, así Einträge alphabetisch sortiert vorgegeben voluntad
@sendmessage(_hGB2%,~WM_SETREDRAW,0,0) 'beschleunigt el Füllen el Gridbox deutlich, außerdem es ellos sowieso unsichtbar
@addstring(_hGB2%,"Fernseher"):@addstring(_hGB2%,"Programa"):@addstring(_hGB2%,"Programmzeitschrift"):@addstring(_hGB2%,"Serie")
@addstring(_hGB2%,"Sender"):@addstring(_hGB2%,"Fernbedienung")
usermessages $10
SetMinLaenge(1) 'minimale Longitud des eingegebenen Textfragments, de el el Vorgaben hinzugefügt voluntad
_s$=" "
SetKeywordEnders(@addr(_s$)) 'sólo " " como Endzeichen para Suchstrings definieren (default=" .,:-+*/\!;")
@setfocus(%HWnd)
_ende%=0
whilenot _ende%
waitinput
AmendEditText(_hE%,_hGB%,0) '0=case insensitive, 1=case sensitive
AmendEditText(_hE2%,_hGB2%,0) '0=case insensitive, 1=case sensitive
if @iskey(27) or (%uMessage=$10)
_ende%=1
mientras que @iskey(27)
sleep 25
endwhile
endif
endwhile
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
21.05.2023  
 




Walter
Posesiones desafortunadamente otra vez una Problema:
Verwende hashes.dll, en para una Expediente el MD5-Prüfsumme a berechnen. [...] 
Geprüft se simplemente irgendein Texto en el Expediente Prüfdatei.txt.
Funktioniert con el normalen Interpreter problemlos - con JRPC3 hay allerdings una No Volver beim Start des Interpreters mittels i (auch, si yo {$NoLocal2GlobalVarConversion} verwende).
' Test de hashes.dll
 {$NoLocal2GlobalVarConversion}
declarar Dat$,dll2&,Pfad$
cls
Pfad$=GetDir$("")
dll2&=UseDLL(Pfad$+"\\hashes.dll")
DEF testit(3) ! "hashes.dll","testit"
' Prüfdatei
Dat$=Pfad$+"\\Prüfdatei.txt"
'
Prüfsumme(Dat$)
'
FreeDLL dll2&
end
'---------------------

proc Prüfsumme

    '---------------------
    ' Berechnen el Prüfsumme uno Expediente mittels MD5.pcu
    parámetros Prüfdatei$
    declarar T&,T$,Expediente$
    Expediente$ = Prüfdatei$' Hier muss por una lokale Variable una lokale Adresse producido voluntad
    ' en el Expediente "MD5" se el MD5 reingeschrieben
    ' el es aber auch en t$
    t& =  testit(addr(Expediente$),"MD5",chr$(0))
    t$ =  cadena$(t&,0)
    ' MD5 el Expediente es auch en t$
    messagebox(t$,"MD5",0)

ENDPROC' Prüfsumme

 
21.05.2023  
 




Jens-Arne
Reumschüssel
¡Hola Walter,

hier es el "chr$(0)" beim Funktionsaufruf de testit(...) el problema. JRPC3 producido standardmäßig una external-Aufruf. Como funktioniert el Typumwandlung de Cuerdas en String-Adressen para chr$(...) de XProfan offenbar no, en DEF-Definition aber ya. Es a dieser Punto de paso relativ sinnfrei, chr$(0) a benutzen, porque lo binär exakt 0 se. Schreibe also:

t& = testit(addr(Expediente$),"MD5",0)

Dann funktioniert lo auch con JRPC3.

Si usted el chr$(0) beibehalten willst, kannst Usted el Umwandlung de DEF-Características en external-Características auch ausschalten: {$NoDef2ExternalConversion}

Um el Grundproblem a verstehen, muss uno wissen, dass el Parámetro de DLL *siempre* 4 Bytes breit son (en 32bit-Programmen). Also es auch el Parámetro "MD5" eigentlich völlig unbrauchbar. Er Aunque zufällig auch 4 Bytes breit (drei Buchstaben y el Nullbyte al Ende), aber en el binären Sinne kommt esta nichts Sinnvolles heraus. El DLL esperado nämlich una Pointer en una String (welcher 4 Bytes breit es), porque uno Cuerdas incluso sólo no como DLL-Parámetro uso kann. XProfan wandelt esta Parámetro aber intern en algo como como @addr(»String, en el "MD5" steht«) en, deshalb merkt uno esta Programmierfehler normalerweise no. Nur para @chr$(...) scheint esta Umwandlung jedenfalls en external-Aufrufen no a trabajo, como oben ya erwähnt.

{$NoLocal2GlobalVarConversion} se en diesem Ejemplo de paso en keiner Variante gebraucht.

Saludo, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
21.05.2023  
 




Walter
Gracias!
 
21.05.2023  
 




Jens-Arne
Reumschüssel
Yo habe me ahora el Funktionsaufruf el DLL otra vez genauer angesehen. In el readme-Expediente es:

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

El Función "testit" no es beschrieben, ellos es aber el einzige Función, el el DLL exportiert. Vermutlich es el letzte Parámetro "start&", porque sonst sería "0" no Sinn hacer. In diesem Fall wäre una Typumwandlung de chr$(0) en una String-Pointer en una String con un Null-Byte tödlich, porque como irgendein riesiger Integerwert rauskommen sería (eben el Adresse en el String). Un Integer-Zahl como "0" scheint por lo tanto el einzig sinnvolle Variante a ser. ¿Por qué lo con DEF trotzdem funktioniert, me está una Rätsel.

Tal vez lo genau andersherum: en DEF no es en una String-Pointer umgewandelt, en external ya. Como De todos modos, como debería una numerischer Valor posición, kein String.

Saludo, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
21.05.2023  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

63.217 Views

Untitledvor 0 min.
Jens-Arne Reumschüssel vor 7 Tagen
Manfred Barei25.09.2024
Gast.081529.08.2024
R.Schneider23.08.2024
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie