SDK-Helfer/ Tools | | | | - page 1 - |
| Jens-Arne Reumschüssel | Guten soir zusammen,
je suis kürzlich sur cela Problem gestolpert, dass XPSE une assez grand Quelldatei de Je ne plus verarbeiten konnte. Variablen wurden soudain comme pas défini gemeldet et autre "erratische" Probleme plus. je pourrait mir présenter, dass ca daran liegt, dass XPSE Schlüsselworte dans Windows-Atoms verwaltet. voilà irgendwann Schluss (chez irgendwas entre 60.000 et 70.000 Stück, wobei on considérer muss, dass XPSE qui Windows-API avec vorhält). Peut-être es mais aussi quelque chose entier d'autre, je peux oui pas dans den "Maschinenraum" de XPSE regarder.
Jedenfalls blieb mir, là XPSE pas plus gepflegt wird, rien d'autre übrig, comme cela nachzubauen. cela Ergebnis ist JRPC3.
----- Features:
*vernünftige annonce de Fehlern *directe Anzeige des Programmablaufes dans XProfEd (sofern qui unten erhältliche aufgebohrte XProfEd verwendet wird) *Umsetzung qui alten Profan-Syntax pour Operatoren et vieille Containerfunktionen *extrem schnelle native fbPROCs, sofern on FreeBasic installiert hat (kostenlos, siehe Aider) *avec fbPROCs peux zudem Inline-Assembler aussi avant XProfan X4 realisiert volonté *extrem schnelle native pbPROCs, sofern on PureBasic installiert hat *Echtzeitverfolgung de Variableninhalten *simple Zeitmessungen im Programmablauf *Profan-Kompilerdirektiven marcher enfin vernünftig (z.B. Verschachtelung) *eingebettete Variablen marcher aussi avec Arrays *qui meisten WIN32-API-Funktionen sommes bereits vordefiniert mitgeliefert *API-Aufrufe sur @external(...) volonté automatisch dans @call(...)-Aufrufe mise en œuvre *Einrückungsanalyse zum trouver de vertrackten Verschachtelungsfehlern *Klammeranalyse zum trouver de vertrackten Klammerfehlern *ENUMERATE-Fonctionnalité *Assert zur Fehlerkontrolle *es peut beliebige DLL dans qui XProfan-EXE integriert volonté, sodass vous pas avec ausgeliefert volonté doit (siehe {$WrapDll}) *simple Killen de avec JRPC3 gestarteten Programmen (interpretiert, .prc gestartet, .exe gestartet) *extrem vite (et daher naturellement pas dans XProfan geschrieben, là une interpretierte Discours hierfür naturgemäß viel trop lente ist) *beim Start de JRPC3 bereits vorhandene .prc-Fichiers peut zum Starten et Linken genutzt volonté (es wird un Hinweis angezeigt, dass es sich um un altes Kompilat handelt) *qui Profan-Compiler peux zur Beschleunigung avec hoher Prozessorpriorität aufgerufen volonté *eingebauter Update-Checker avec Télécharger, si es un Update gibt (Aider --> online pour Updates chercher) *64- ou bien 32-bit-Version disponible (simple JRPC3_64.exe ou bien JRPC_32.exe comme Interpreter dans XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] et JRPC3 avec F7 starten) - attention, qui 64-bit-Version erzeugt naturellement aucun 64-bit-XProfan-Programme, là XProfan cela pas peux, mais JRPC3 selbst wird comme 64-bit-Programme fonctionnement *XProfan X4-Syntax disponible (möglicherweise encore pas alles, là je probablement pas alles en benutze, mais j'ai mich um Vollständigkeit prêt - jedenfalls sommes z.B. HASH-Arrays et QUADINTs dabei) *Interpreter, PRCs et EXEs peut avec Kommandozeilenparametern fonctionnement volonté *Interpreter, PRCs, EXEs et XPSE peut avec Administratorrechten fonctionnement volonté *Prozeduren, qui dans dem aktuellen Programme zwar enthalten sommes, mais pas verwendet volonté, volonté aus qui umgesetzten Dossier entfernt, à Dateigröße des Kompilats possible petite trop tenir *Variablen, qui dans dem aktuellen Programme zwar enthalten sommes, mais pas verwendet volonté, volonté aus qui umgesetzten Dossier entfernt, à Dateigröße des Kompilats possible petite trop tenir et den Speicherverbrauch trop optimaliser *nPROCs aus XPSE volonté automatisch avec XPE trop einer DLL mise en œuvre et qui Aufrufe qui nPROCs im Programme entsprechend angepasst, sofern XPSE vorhanden ist *presque alles aus XPSE funktioniert aussi dans JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime et Compiler festlegen, Shorties, ...) *XProfEd_JR avec Voir le texte source-AutoComplete *XProfEd_JR avec Voir le texte source-Memory-Funktion (Markierungen, trop denen zurückgesprungen volonté peux)
Einschränkungen: -ne...aucune XPSE-Inline-Assembler, wohl mais XProfan-Inline-Assembler (y allerdings aucun Prüfungen sur Korrektheit des Codes) -ABER: il peut XPSE aus JRPC3 heraus appel, sodass cet Fonctionnalité weiterhin disponible ist, sofern on XPSE besitzt (neuer Shorty: {$x}) -Variablen, qui dans einer Procédure pas deklariert sommes, mais "aus qui aufrufenden Procédure übernommen werden", sommes standardmäßig pas zugelassen (XProfan erlaubt cela, mais so quelque chose ist genauso tödlich comment GOTO-Anweisungen). s'il te plaît alle trop nutzenden Inputs comme paramètre transfert, et si quelque chose aus dem aufrufenden Programmteil modifié volonté muss, beim Aufruf comme paramètre z.B. @addr(x&) verwenden et dans qui Procédure parameters x# et LONG x#,0=y& nutzen. si on mais absolument "vererbte" Variablen nutzen voudrais, peux on ca avec qui Kompilerdirektive {$Déclarer...} 1faire.
*comme Hommage à XPSE lautet qui Endung qui Ausgabedatei ".enh3"
une genauere Erläuterung qui individuel Features ist qui chm-Hilfedatei trop entnehmen, qui im Programme sous Aider --> Hilfedatei Montrer ou bien avec F1 disponible ist.
----- /Features
Herunterladen et installer: JRPC3 peux unten heruntergeladen volonté (setup_jrpc3.exe ou bien comme ZIP-Dossier). comme Installationsverzeichnis s'il te plaît cela XProfan-Stammverzeichnis angeben, alors dasjenige, dans dem qui Fichiers PROFANE.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ peux qui ZIP-Dossier heruntergeladen et en le contenu manuel ins XProfan-Stammverzeichnis kopiert volonté.
Einrichtung: JRPC3_64.exe ou bien JRPC_32.exe comme Interpreter dans XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] et JRPC3 avec F7 starten.
Alle Befehle sommes avec dem Befehl "h" comment "Hilfe" abrufbar et devrait selbsterklärend son.
Pour viele erweitere Features, qui XProfEd betreffen, comment z.B. jenes, qui la ligne, dans qui un faute auftrat, direct dans XProfEd Montrer trop peut, ist qui mitinstallierte XProfEd_JR erforderlich. Pour cette muss on alors XProfEd_JR.exe statt XProfEd.exe comme Editor benutzen. comme "goody" gibt es en supplément, dass beim sur- et Zufalten de Programmen un Fortschrittsanzeiger integriert ist (cela peux chez grand Programmen oui bekanntlich un bisschen dauern).
Es mag son, dass encore pas alles parfait funktioniert. je s'il te plaît hierfür um Nachsicht. mon Programme laisser sich umsetzen, mais cela muss encore longtemps pas appeler, dass ca avec Programmen anderer Auteurs, qui chacun so ses Eigenheiten avons, aussi funktioniert.
Fehlermeldungen et Verbesserungsvorschläge volontiers à jreumsc@web.de ou bien ici im Forum.
Beste Grüße, Jens-Arne |
| 2.584 kB | | Bezeichnung: | JRPC3 | | Version: | 10.29 | | Kurzbeschreibung: | JRPC3-Installer | | Hochgeladen: | 15.02.2021 | | Downloadcounter: | | | | Download | | | | 1.699 kB | | Bezeichnung: | XProfEd_JR | | Version: | 5.2 | | Kurzbeschreibung: | vieille Version sans AutoComplete zur Sicherheit | | Hochgeladen: | 15.02.2021 | | Downloadcounter: | | | | Download | | | | 3.777 kB | | Bezeichnung: | JRPC3 | | Version: | 10.29 | | Kurzbeschreibung: | ZIP-Dossier statt Installer | | Hochgeladen: | 02.04.2021 | | Downloadcounter: | | | | Download |
| | | XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 16.02.2021 ▲ |
| |
| | | | - page 23 - |
| | « cette Beitrag wurde comme Solution gekennzeichnet. » | | - page 15 - |
| Jens-Arne Reumschüssel | il y a une neue Version, qui anders avec dem internen Messagehandling umgeht. s'il te plaît probier qui la fois aus. Peut-être cela Problem avec cela 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 ▲ |
| | |
| | funkheld | comment wird cela s'il te plaît dans Pb mise en œuvre?
nProc getCircP(long r,w) return long(sin(0.0174532925199433*float(w)/1000.0)*float(r)) endproc
merci. Gruss |
| | | | |
| | Jens-Arne Reumschüssel | je denke, so:
declare 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 imprimer getCircP(@addr(r!),@addr(w!)) waitinput end
mais ist es wirklich sinnvoll, une Integerwert zurückzugeben? Sollte cela pas besser aussi un Float son? So etwa:
declare r!,w!,result!
pbProc getCircP(*r,*w,*result) protected r.d,w.d r=PeekD(*r) w=PeekD(*w) PokeD(*result,sin(0.0174532925199433*w/1000.0)*r) endproc
cls r!=2 w!=3 getCircP(@addr(r!),@addr(w!),@addr(result!)) imprimer result! waitinput end
ou bien encore einfacher avec Shared-Variablen:
declare r!,w!,result! shared
pbProc getCircP() result!=sin(0.0174532925199433*w!/1000.0)*r! endproc
cls r!=2 w!=3 getCircP() imprimer result! 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 | merci pour deine schnelle Aider.
Werde es encore einmal testen.
merci. |
| | | | |
| | Walter | Freue mich sur JRPC3, habe eh bien mais un Problem avec einem array. JRPC3_64.exe fonctionne problemlos par, qui nachfolgend gestartete Interpreter bricht cependant ab avec "Das Element gibt es pas!".
si je cela Programme juste im Profan-Interpreter starte, fonctionne es problemlos par.
' Array-Test / Shuffle
' Mischt qui Einträge qui Listboxliste
cls
randomize
' Listboxliste avec Cordes 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 qui Einträge qui Listboxliste
declare anz%
anz%=getcount(0)
Déclarer i%,nr%,L$[anz%]
clear L$[]
i%=0
Tandis que i% < anz%' par qui Listboxliste
nr%=rnd(anz%)' Einen zufälligen place im Array choisir
tandis que L$[nr%]<>»' déjà besetzt? ensuite den prochain freien place chercher
inc nr%
cas nr%=anz%: nr%=0' si am Ende: de vorne weg récente essayer
Wend
L$[nr%]=getstring$(0,i%)
Inc i%
Wend
clearlist
déplacer("ArrToList",L$[])
endproc' shuffle
Woran liegt cela? |
| | | | |
| | Jens-Arne Reumschüssel | cela hatte quelque chose avec cela trop 1faire, dass Du un Array sur une variable dimensioniert la hâte (Déclarer ...,L$[anz%]). dans diesem le cas doit kurze Variablennamen et toujours global definierte Variablen dans JRPC3 ausgeschaltet volonté, quoi eh bien automatisch geschieht. maintenant sollte Dein Programme alors courir. |
| | | XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 15.05.2023 ▲ |
| |
| | Walter | | | | | |
| | Jens-Arne Reumschüssel | Version 9.08a:
Map-données erzeugen: faute, qui au cours de qui Umsetzung eines Codes avec JRPC3 festgestellt volonté, volonté bekanntlich direct de JRPC3 à qui richtigen Stelle im Quellcode angezeigt (si qui mitglieferte XProfEd_JR genutzt wird). si allerdings zur Laufzeit eines Programmes un faute auftritt (z.B. une Überschreitung des Dimensionierungsbereichs eines Arrays), gibt XProfan seulement une knappe Laufzeit-Fehlermeldung aus, qui mais souvent wenigstens une Zeilennummer contient. cet Zeilennummer bezieht sich cependant malheureusement sur den kumulierten Code, den XProfan abarbeitet, sodass es presque unmöglich ist, qui ausgegebene Zeilennummer einer Zeilennummer im Voir le texte source et en supplément aussi encore qui richtigen Quelltextdatei (z.B. einer INC-Dossier) zuzuordnen. Hierbei aider Map-données. si cet Option aktiviert ist, écrit JRPC3 avec, woher chacun einzelne la ligne des Endcodes dans qui .enh3-Dossier stammt, sodass qui kumulierten Zeilennummern wieder ihrem Ursprung zugeordnet volonté peut. si un XProfan-Laufzeitfehler avec einer y gemeldeten Zeilennummer auftritt, peux on eh bien sur cela menu "Datei" --> "Laufzeitfehlerzeile finden" qui de XProfan ausgegebene Zeilennummer eingeben et erhält dans XProfEd_JR qui la ligne aus qui richtigen Quelldatei angezeigt, dans qui qui faute auftrat. cela funktioniert allerdings seulement, si auparavant dans den Optionen de JRPC3 qui Map-données-Erzeugung aktiviert wurde. ca peux aussi encore pour Auftreten des Laufzeitfehlers geschehen, sofern qui Programmcode pas ergänzt ou bien gekürzt wurde, quoi naturellement qui ermittelte Zeilennummer beeinflussen serait. si qui Map-données justement pas plus gebraucht volonté, sollte cet Option wieder deaktiviert volonté, weil vous den Voir le texte source um extrem viele Kommentare erweitert et avec cela den Interpreter de XProfan langsamer pouvoir. |
| | | 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 | ici un ausführliches Beispiel pour qui Nutzung de fbPROCs pour cela schnelle Vorgeben de beliebig vielen vordefinierten Wörtern dans Éditer-Controls. qui Vorgaben stehen jeweils dans einer GridBox, wobei pour verschiedene Éditer-Controls différent GridBoxen verwendet volonté peut. Es volonté fbPROCs verwendet, avec cela pas seulement diejenigen, qui PureBasic besitzen, cela ausprobieren peut.
entier am Anfang dans FBGLOBAL chez #include muss qui jeweils zutreffende Pfad angegeben volonté. car es wird qui Bibliothèque commctrl.bi gebraucht, à API-Konstanten pour ListViews benutzen trop peut.
declare _hE%,_hE2%,_hGB%,_hGB2%,_ende%,_s$,_ws#
'{ 'fbPROCs FBGLOBAL #include "D:\Programme\FreeBasic\inc\win\commctrl.bi" 'ici muss qui richtige Pfad angegeben volonté dim shared as integer _MaxNum=0,_MinLaenge=1 redim shared as integer _NumhGB(0 to 1) redim shared as string _OldAktEntry(0 to 1) dim shared as string _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 string AktEntry,Vorgabe,s2,AktSubStr,LeftPart,RightPart dim as integer i,CurPos,erg,num dim as zstring pointer zs,zs2 '{ 'numéro qui GB ermitteln num=0 for i=1 to _MaxNum si _NumhGB(i)=hGB num=i exit for endif next i si 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) '} si AktEntry<>_OldAktEntry(num) si 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 si i>0 si instr(_KeywordEnders,mid(AktEntry,i,1))<>0 LeftPart=left(AktEntry,i) exit for d'autre AktSubStr=mid(AktEntry,i,1)+AktSubStr endif d'autre LeftPart="" endif next i for i=Curpos+1 to len(AktEntry) si instr(_KeywordEnders,mid(AktEntry,i,1))<>0 RightPart=right(AktEntry,len(AktEntry)-(i-1)) exit for d'autre AktSubStr=AktSubStr+mid(AktEntry,i,1) endif next i '} si len(AktSubStr)>=_MinLaenge i=LVFindText(hGB,AktSubStr,-1) si i>=0 Vorgabe=LVGetText(hGB,i) si CaseSensitive si left(Vorgabe,len(AktSubStr))=AktSubStr erg=1 d'autre erg=0 endif d'autre si ucase(left(Vorgabe,len(AktSubStr)))=ucase(AktSubStr) erg=1 d'autre erg=0 endif endif si erg si 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 return 0 ENDPROC 'AmendEditText
fbPROC SetMinLaenge(byval Laenge as integer) as integer export _MinLaenge=Laenge si _MinLaenge<1 _MinLaenge=1 endif return 0 ENDPROC 'SetMinLaenge
fbPROC SetKeywordEnders(byval Text as zstring pointer) as integer export _KeywordEnders=peek(zstring,Text) return 0 ENDPROC 'SetKeywordEnders
'{ 'Hilfsfunktionen fbPROC LVGetCount(byval hLV as integer) as integer return sendmessage(cast(any pointer,hLV),LVM_GETITEMCOUNT,0,0) ENDPROC 'LVGetCount fbPROC LVFindText(byval hLV as integer,byval text as string,byval StartLine as integer) as integer 'search is cas insensitive dim as LVFINDINFOA LVFI dim as zstring pointer zs dim as integer erg LVFI.flags=LVFI_PARTIAL OU LVFI_STRING zs=allocate(len(text)+1) poke zstring,zs,text LVFI.psz=zs erg=sendmessage(cast(any pointer,hLV),LVM_FINDITEM,StartLine,cast(integer,@LVFI)) deallocate(zs) return erg ENDPROC 'LVFindText fbPROC LVGetText(byval hLV as integer,byval la ligne as integer,byval Spalte as integer=0) as string dim as LVITEM LVI dim as string 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,la ligne,cast(integer,@LVI)) ret=peek(zstring,LVItemText) deallocate(LVItemText) return ret ENDPROC 'LVGetText '} '}
'*** Hauptprogramm Fenêtre Style 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 seulement Montrer, si cela Modifier le champ de pas den Fokus hat (default); 1=auch Montrer, si fokussiert _hE2%:=@create("EDIT",%HWnd,"",10,40,300,20) widestring _ws#,0="rund um den Fernseher" @sendmessage(_hE2%,~EM_SetCueBanner,0,_ws#) 'lParam: 0=Hinweis seulement Montrer, si cela Modifier le champ de pas den Fokus hat (default); 1=auch Montrer, si fokussiert dispose _ws# _hGB%:=@create("GRIDBOX",%HWnd,"1;0;0",1,0,0,0,0) 'sortiert, avec cela Einträge alphabetisch sortiert vorgegeben volonté @sendmessage(_hGB%,~WM_SETREDRAW,0,0) 'beschleunigt cela Füllen qui Gridbox deutlich, aussi ist vous 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, avec cela Einträge alphabetisch sortiert vorgegeben volonté @sendmessage(_hGB2%,~WM_SETREDRAW,0,0) 'beschleunigt cela Füllen qui Gridbox deutlich, aussi ist vous sowieso unsichtbar @addstring(_hGB2%,"Fernseher"):@addstring(_hGB2%,"Programme"):@addstring(_hGB2%,"Programmzeitschrift"):@addstring(_hGB2%,"Serie") @addstring(_hGB2%,"Sender"):@addstring(_hGB2%,"Fernbedienung") usermessages $10 SetMinLaenge(1) 'minimale Longueur des eingegebenen Textfragments, ab qui qui Vorgaben hinzugefügt volonté _s$=" " SetKeywordEnders(@addr(_s$)) 'seulement " " comme Endzeichen pour Suchstrings définir (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 si @iskey(27) or (%uMessage=$10) _ende%=1 tandis 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 | Habe malheureusement wieder un Problem: Verwende hashes.dll, um pour une Dossier qui MD5-Prüfsumme trop berechnen. [...] Geprüft wird simple irgendein Text dans qui Dossier Prüfdatei.txt. Funktioniert avec dem normalen Interpreter problemlos - avec JRPC3 gibt es allerdings un No Retour beim Start des Interpreters mittels i (aussi, si je {$NoLocal2GlobalVarConversion} verwende).
' Test de hashes.dll
{$NoLocal2GlobalVarConversion}
declare 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 qui Prüfsumme einer Dossier mittels MD5.pcu
parameters Prüfdatei$
declare T&,T$,Dossier$
Dossier$ = Prüfdatei$' ici muss par une lokale Variable une lokale Adresse erzeugt volonté
' dans qui Dossier "MD5" wird qui MD5 reingeschrieben
' qui steht mais aussi dans t$
t& = testit(addr(Dossier$),"MD5",chr$(0))
t$ = string$(t&,0)
' MD5 qui Dossier steht aussi dans t$
messagebox(t$,"MD5",0)
endproc' Prüfsumme
|
| | | | |
| | Jens-Arne Reumschüssel | allô Walter,
ici ist cela "chr$(0)" beim Funktionsaufruf de testit(...) cela Problem. JRPC3 erzeugt standardmäßig une external-Aufruf. là funktioniert qui Typumwandlung de Cordes dans String-Adressen pour chr$(...) de XProfan évident pas, chez qui DEF-définition mais déjà. c'est à cette Stelle incidemment relativ sinnfrei, chr$(0) trop benutzen, weil daraus binär exakt 0 wird. Schreibe alors:
t& = testit(addr(Dossier$),"MD5",0)
ensuite funktioniert es aussi avec JRPC3.
si Du cela chr$(0) beibehalten veux, peux Du qui Umwandlung de DEF-Funktionen dans external-Funktionen aussi ausschalten: {$NoDef2ExternalConversion}
Um cela Grundproblem trop comprendre, muss on savons, dass qui paramètre de DLL *toujours* 4 Bytes breit sommes (dans 32bit-Programmen). alors ist aussi qui paramètre "MD5" eigentlich völlig inutilisable. il ist zwar zufällig aussi 4 Bytes breit (trois Buchstaben et cela Nullbyte am Ende), mais im binären Sinne venez dabei rien Sinnvolles heraus. qui DLL erwartet nämlich une Pointer sur une String (quel 4 Bytes breit ist), weil on Cordes selbst arrêt pas comme DLL-paramètre verwenden peux. XProfan wandelt cette paramètre mais interne dans quelque chose comme comment @addr(»String, dans dem "MD5" steht«) um, c'est pourquoi merkt on cette Programmierfehler normalement pas. seulement pour @chr$(...) scheint cet Umwandlung jedenfalls chez external-Aufrufen pas trop marcher, comment dessus déjà erwähnt.
{$NoLocal2GlobalVarConversion} wird dans diesem Beispiel incidemment dans aucun variante gebraucht.
Salut, 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 | | | | | |
| | Jens-Arne Reumschüssel | j'ai mir maintenant den Funktionsaufruf qui DLL nochmal genauer angesehen. dans qui readme-Dossier steht:
?_Hash(Dossier$ | bereich#,Algorithmus$[[,start&],size&])
qui Funktion "testit" wird pas beschrieben, vous ist mais qui einzige Funktion, qui qui DLL exportiert. Vermutlich ist qui dernier paramètre "start&", car sonst serait "0" keinen Sinn faire. dans diesem le cas wäre une Typumwandlung de chr$(0) dans une String-Pointer sur une String avec einem zéro-Byte tödlich, weil là irgendein riesiger Integerwert rauskommen serait (plan qui Adresse sur den String). une Integer-numéro comment "0" scheint daher qui seule sinnvolle variante trop son. pourquoi es avec DEF quand même funktioniert, c'est moi un Rätsel.
Peut-être es oui c'est ca andersherum: chez DEF wird pas dans une String-Pointer umgewandelt, chez external déjà. comment De toute façon, là sollte un numerischer Wert stehen, ne...aucune String.
Salut, 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 ▲ |
| |
|
répondreOptions du sujet | 64.345 Views |
Themeninformationencet Thema hat 8 participant: |