Forums d'aide et d'échanges autour de Rapidq
Vous n'êtes pas identifié.
Corriger l'orthographe est une galère pour moi ! Il doit en rester quelques unes ... comme toujours ![]()
Je vais aussi poster sur mon site une version compilée de FBinRq.Exe contenant cette donc instead de l'engliche.
-------------------------------------------------------------------------------
========- FBinRQ AIDE MEMOIRE -======= Jacques === 28 juilet l2010 ==============
-------------------------------------------------------------------------------
- l'espace est le séparateur dans les lignes ''pre cmd et $IFDEF
- dans les options de ''pre cmd options, remplacez les espaces par * ' ' > '*'
- seul le mot ''pre est '?sensible à la casse?' les autres non
- Freebasic en ligne RQ entre : $IFDEF FBB/$ENDIF ou $BEGIN FREEBASIC/$END (*)
''pre cmd monFichierFB.fbb ou ''pre cmd (monScriptResHacker)RH
- ''pre cmd maJolieIcone.Ico dans le répertoire de votre code RQ
- ''pre cmd accepte les chemins d'accès si les espaces y sont remplacés par '*'
- ajouter la ligne ''pre cmd avant la 1 ère ligne de code RQ et après les
lignes de commentaires en tête du fichier principal de votre code RapidQ
-------------------------------------------------------------------------------
Les options de compilation sont d'abord lues dans FBinRQ.Ini, ensuite elles sont
modifiées selon le contenu des lignes ''pre. Vous définissez vos options de
compilation habituelles dans FBinRQ.Ini et vous adaptez à chaque application
dans les lignes ''pre cmd de votre code ex:
''pre cmd noconsole encrypt opt norun upx diriCon
''pre cmd liste des options : (lire plus bas pour plus de détails)
Set Reset
"CON"="CONSOLE" "NOCON"="NOCONSOLE" ' ajoute la console
"ENC"="ENCRYPT" "NOENC"="NOENCRYPT" ' encrypte le bytecode
"OPT"="OPTIMIZE" "NOOPT"="NOOPTIMIZE" ' l'option -OPT de RC.EXE
"EXE" "NOEXE" ' crée un exe
"RUN" "NORUN" ' exécute l'exe crée
"FBRECOMPILE"="FBRE" "FBNORECOMPILE"="NOFBRE" ' Recompile le lanceur de bytecode
"DIRICON" "NODIRICON" ' Icone app = 1ère icone rep du code
"KILL"="KILLFILES" "NOKILL"="NOKILLFILES" ' efface fichiers générés par la compilation
"ADDDLL"="ADDRQ32DLL" "NOADDDLL"="NOADDRQ32DLL" ' Ajoute RapidQ32.Dll à l'Exe
"UPX" "NOUPX" ' compresse l'Exe avec UPX (inhibé par ENCRYPT)
"OUTPUT"="OUT" "NOOUTPUT"="NOOUT" ' Montre la sortie de RC.EXE même sans erreur
"LANGDEPRECATED"="DEPRE" "NOLANGDEPRECATED"="NODEPRE" ' FB option de compil -lang deprecated
"LANGFBLITE"="FBLITE" "NOLANGFBLITE"="NOFBLITE" ' Fb option de compil -lang fblite
"LANGFB"="FB" "NOLANGFB"="NOFB" ' FB option de compile -lang fb
"LANGQB"="QB" "NOLANGQB"="NOQB" ' FB option de compile -lang qb
"FB016" "NOFB016" ' ajoute option explicit et option byval au code FB
"GICO"="FORCEGUIICON" "NOGICO"="NOFORCEGUIICON" ' Force Default Gui Ico (pour gui avec console
"WARNING"="WARN" "NOWARNING"="NOWARN" ' Ajoute les warning de compil FB dans la sortie de FBinRQ
"VON"="VERBOSE" "VOFF"="NOVERBOSE" ' Option verbose de RC.EXE
"BEEP" "NOBEEP" ' Sons FBinRQ on/off
"FBTIMOUT" "NOFBTIMOUT" ' pas implémenté ...
"BUILDCOUNT"="COUNT" "NOBUILDCOUNT"="NOCOUNT" ' ''Pre Datas mises à jour autorisée
"DEFAULTMANIFEST" = "DEFMAN" "NODEFAULTMANIFEST" = "NODEFMAN" ' utilise le manifest inclus dans FBinRQ
"RAPIDQEX"="RQEX" "NORAPIDQEX"="NORQEX" ' Utilise RapidQEx.Dll de Paul si présente
"BK" "NOBK" ' n'efface pas le backup fichier bas pricipale si surécrit
"LAUNCHERBAS" = "LAUNBAS" "NOLAUNCHERBAS" = "NOLAUNBAS" ' n'efface pas le code launcher même si kill
'
Les options "NO" sont utilisées pour resetter les valeurs settées par default dans FBinRQ.Ini
-------------------------------------------------------------------------------
Pour setter l'Icone du mainform avec RapidQ32.Dll pour Version < V109
$RESOURCE FORM_ICO AS "PathFile.Ico"
frmMyForm.IcoHandle = FORM_ICO
-------------------------------------------------------------------------------
- Inclure du code FreeBasic dans RapidQ 3 methodes : 1) $IFDEF FBB ... $ENDIF
et/ou 2)''pre cmd monFichierCodeFB.Fbb 3) $BEGIN FREEBASIC ... $END
- Inclure une resource FreeBasic dans RapidQ 3 méthodes: 1)$IFDEF FBR ... $ENDIF
et/ou 2)''pre cmd monFichierFBRC.RC et/ou 3)$BEGIN RC_SCRIPT ... $END (*)
- Inclure Script Resource Hacker dans RapidQ 3 méthodes :
1) $IFDEF RHK ... $ENDIF et/ou 2) $BEGIN RH_SCRIPT ... $END et ou
3) ''pre cmd (-add*Resource.Bmp,TBMP,NBMP,0)RH notez '*' pour ' '
- Inclure un manifest (XP, VISTA, ...) 3 méthodes :
1) $IFDEF Manifest ... $ENDIF ou 2) $BEGIN Manifest ... $END
3) ''pre cmd monFichierManifest.Manifest
- Pour utiliser les formes $BEGIN ... $END, ajouter à RapidQ.Inc
$DEFINE $BEGIN $IFDEF
$DEFINE $END $ENDIF (suggestion de JohnK)
- Les fichiers RapidQ inclus avec un chemin absolu(non relatif) seront ignorés
lors de la recherche de codes 'non RapidQ'. Ils seront pris en compte lors
de compilation RapidQ avec RC.EXE évidemment.
- Ne JAMAIS definir $DEFINE FBB, FBR or RHK dans votre code JAMAIS JAMAIS
- dans les options des lignes ''pre cmd remplacez " " par "*"
ex: "my*nice.ico" pour "my nice.ico"
ou "(-add*Resource.Bmp,TBMP,NBMP,0)RH" ou "d:\RapidQ\Belles*Icones\Ma*Belle.Ico"
- remarque utile, comme les options de ''pre cmd sont séparées par " " et les
options non reconnues ou mal orthographiées sont ignorées, une option déja
installée peut être rendue inopérante en lui ajoutant un caractére :
'console ou console' sera ignoré
- renommer un Tiny exécutable quand des fonctions externes y sont inclues
provoque une erreur à l'exécution 'can't resolve', comme pour les Dll.
- l'ordre d'apparition des options est sans importance
-------------------- ''pre Datas Format ma macro ----------------------------
DefStr sCompteCompilation = "0.000" ''pre + 0.001 3
DefStr sHeureDerniereCompilation = "xx:xx:xx" ''pre Time$
DefStr sDateDerniereCompilation = "xx-xx-xxxx" ''pre Date$
DefStr PremiereCompilation = "" ''pre First
DefStr sTimer = "1234567890" ''pre timer
Couper et coller une, des ou aucune de ces lignes dans votre code après
les lignes ''pre cmd et avant ''pre end . Le nom des variables peut changer.
-------------------------------------------------------------------------------
' ===================================================================
' FBinRQ EXAMPLE CUT & PASTE FROM April 2009 Jacques
' -------------------------------------------------------------------
''pre cmd noopt noenc DirIcon Kill 'upx 'adddll 'nofbre OUT 'nocount
DefStr sBuildCount = "0.000" ''pre + 0.001 3
DefStr sCompileTime = "xxxxxxxx" ''pre time$
DefStr sCompileDate = "xxxxxxxxxx" ''pre date$
DefStr FirstCompiled = "" ''pre first
DefStr sTimer = "xxxxxxxxxx" ''pre timer
''pre end
'
Declare function AddInt1 Lib "MyRq.Exe" Alias "AddInt1@8" (operand1 as Long, operand2 as Long) as Long
Print Chr$(10);Chr$(10);Chr$(10);"FB AddInt1 (7 + 8) = ";AddInt1 (7, 8)
ShowMessage ("FINISHED")
'
$IFDEF FBB ' FB code
Declare Function AddInt1 Lib "" Alias "AddInt1" (ByVal i1 As Long, ByVal i2 As Long) As Long
'
Function AddInt1 (i1 As Long, i2 As Long) As Long Export
Function = i1 + i2
End Function
$ENDIF ' End FB code
' ==================================================================
' FB Resource in FB code // to add comments in fb resources
$IFDEF FBR
#define FBRCDATA 6868 //RCDATA not defined in FB
BAS_CODE FBRCDATA "GetResource.Bas" // NAME TYPE "FileName"
$ENDIF
' ==================================================================
' ADD A FREEBASIC RESOURCE ICON
$IFDEF FBR
#define MSGBOXICON 1300
MSGBOXICON ICON "Compass.Ico" //same for all known resource type
$ENDIF
' ==================================================================
FB version compatibility issues? Try this:
''pre cmd langdeprecated fb016 allow FB>=017 to compile FB < 017 code
' ==================================================================
''pre cmd NewNameForEmbedded.Dll change the name of the embedded .dll
''pre cmd YourFreeBasicCodeFile.Fbb include a freebasic code file
''pre cmd YourFreeBasicResourceRCFile.RC
''pre cmd (-cmdresourcehackerscript*RH_word1,RH_Word2, ....)RH
Icon example ''pre cmd (-addoverwrite*compass.ico,ICONGROUP,1300,0)RH
' ==================================================================
' --- END OF QUICK DOC ---
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
==================- FBinRQ LONGUE DOCUMENTATION BARBANTE -=====================
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
D'abord un remerciement a Paul Luudgate qui me suggera que les fonctions
du lanceur de bytecode sont juste des fonctions externes et peuvent être
déclarées comme des APIs, 'lib' est dans ce cas le nom de l'executable. Ceci
rendit obsolète les lignes ''RQEXPORT que nécessitait RQPC, ceci permit
aussi de créer des fonctions FreeBasic comportant autant d'arguments que
nécessaire (toujours quatre avec RQPC). Cette méthode est aussi beaucoup
plus commune que ''RQEXPORT ... qui avait aussi ses avantages.
---
Le précompilateur scanne les codes RapidQ très rapidement car il ne
s'intéresse qu'aux lignes commençant par $ et au 50 premières lignes
de code si elles contiennent un ''pre. Si ''pre end est rencontré le
scannage des 50 premières lignes de code RQ à la recherche de lignes
contenant ''pre est interrompu, ajouter ''pre end à la suite vos lignes
de ''pre cmd permet de racourcir le temps de compilation de quelques
centièmes de seconde.
Les lignes contenant ''pre et les lignes de commentaires ne sont pas
comptées parmi ces 50 lignes
---
Lire les documentations de RQPC vous aideront et vous donneront de
plus amples informations concernant les bytecodes. L'essentiel du code
de FBinRQ provient de RQPC. 99% de FBinRQ est compatible avec RQPC.
------------------------------------------------
Fichiers nécessaires au fonctionnement de FBinRQ
------------------------------------------------
Plus de détails sur ces fichiers dans la doc installation
FBinRQ nécessite une version de FreeBasic installée. Testé avec
FB016, 017A, 020B.
Dans le répertoire de FBinRQ.Exe doit se trouver le fichier FBinRQ.Ini
dont vous devez corriger manuellement, avec un éditeur, les chemin d'accès
à FB et à RQ afin qu'ils correspondent à vos installations FB et RQ.
Une version de UPX.Exe et de ResHacker.Exe doit être disponible dans le
même répertoire que FBinRQ.Exe. Les autres fichiers de UPX et Resource
Hacker ne sont pas nécessaires
Dans le répertoire de FBinRQ doit aussi se trouver une version de
RapidQ32.Dll renommée RQ32.Dll (V109 conseillée : Icon App = Icon MainForm)
Une version de RapidQ32.Dll doit être accessible pour vos applications
L'idéal est de la placer sous c:\Windows mais il est aussi possible de
tout compiler avec l'option AddDll qui ajoute RQ32.Dll à vos applications
et 'recrache' RapidQ32.Dll avant d'executer votre application
(= le bytecode).
---
----------------------------------------------------
FBinRQ Accepte du Code FreeBasic dans le Code RapidQ
----------------------------------------------------
Le code FreeBasic inclus dans un code RapidQ doit être inséré entre
les lignes
$IFDEF FBB
votre code FreeBasic ici
$ENDIF
ou, si vous définissez quelque part (dans RapidQ.Inc par exemple)
$IFNDEF $BEGIN
$DEFINE $BEGIN $IFDEF
$ENDIF
'
$IFNDEF $END
$DEFINE $END $ENDIF
$ENDIF
alors ce qui suit fonctionne aussi. Une suggestion de JohnK
$BEGIN FREEBASIC
Votre code FreeBasic ici
$END
Comme FBB n'est pas defini - $Define -, le compilateur RapidQ ignore,
passe les lignes comprises entre $IFDEF FBB et $ENDIF
Le code FreeBasic peut-être inclus dans tous les fichiers RapidQ
de votre projet pour autant que ce fichier soit inclus relativement
au répertoire principal du projet.
Avec FBinRQ, le code suivant compile et s'execute sans erreur
' --- Debut Code RapidQ ---- FR: AddInt = Ajoute deux entiers
$TYPECHECK ON
Declare function AddInt Lib "MonRq.Exe" Alias "AddInt@8" (operand1 as Long, operand2 as Long) as Long
'
Print Chr$(10);Chr$(10);Chr$(10);"FB AddInt (7 + 8) = ";AddInt (7, 8) ' Appelle la function FB AddInt
'
$IFDEF FBB ' Code FB
Declare Function AddInt Lib "" Alias "AddInt" (ByVal i1 As Long, ByVal i2 As Long) As Long
'
Function AddInt (i1 As Long, i2 As Long) As Long Export
Function = i1 + i2
End Function
$ENDIF ' Fin code FB
ShowMessage "Terminé"
' ---- Fin Code RapidQ ----
Compilé avec chemin\FBinRQ path\VotreFichierCodeRQ.TouteExt
Il est aussi possible de rassembler toutes les fonctions FreeBasic dans
un seul fichier ne contenant que du code FreeBasic et de forcer sa
compilation par FBinRQ en ajoutant dans une ligne ''pre cmd
le nomdufichierFB.FBB l'extension .FBB est indispensable.
''pre cmd SuperCodeFB.FBB
Tous les codes FreeBasic seront rassemblés dans un seul fichier,
les fichiers .FBB trouvés dans les lignes ''pre cmd ensuite
les divers codes FB trouvé dans le code RapidQ
Pas de limite de syntaxe FreeBasic
FB accepte de l'assembleur AS (GCC) en ligne, par ce biais, FBinRQ aussi.
-------------------------------------------------------
FBinRQ accepte des ressources FreeBasic dans le code RQ
-------------------------------------------------------
Les scriptes de Ressources FreeBasic doivent être insérés entre
$IFDEF FBR
vos ressources FreeBasic ici
$ENDIF
ou
$BEGIN RC_SCRIPT
vos ressources FreeBasic ici
$END
Le code ressource FreeBasic peut-être inclus dans tous les fichiers
RapidQ de votre projet pour autant que ce fichier soit inclus
relativement au répertoire principal du projet.
Il est aussi possible de rassembler toutes les ressources FreeBasic
dans un seul fichier ne contenant que des ressources FreeBasic et
de forcer sa compilation par FBinRQ en ajoutant dans une ligne
''pre cmd le nomdufichierRC.RC l'extension .RC est indispensable.
''pre cmd SuperRessourcesFB.RC
Toutes les ressources FreeBasic seront rassemblées dans un seul
fichier, les fichiers .RC trouvés dans les lignes ''pre cmd ensuite
les diverses ressources FB trouvées dans le code RapidQ
Très peu testé mais devrait fonctionner si les lignes de ressources
respectent la syntaxe FreeBasic ?
-------------------------------------------------------------
FBinRQ accepte des ressources Resource Hacker dans le code RQ
-------------------------------------------------------------
Les scripts de Ressources Resource Hacker doivent être insérés entre
$IFDEF RHK
vos ressources Resource Hacker ici
$ENDIF
ou
$BEGIN RH_SCRIPT
vos ressources Resource Hacker ici
$END
Le code ressource Resource Hacker peut-être inclus dans tous les
fichiers RapidQ de votre projet pour autant que ce fichier soit
inclus relativement au répertoire principal du projet.
Les lignes ''pre cmd acceptent aussi des scripts de ressource
Resource Hacker, le format est:
''pre cmd (script*de*la*ressource*RH)RH
exemple :
''pre cmd (-addoverwrite*Umbrella.Ico,ICONGROUP,UMBRELLA,0)RH
note: les espaces doivent être remplacés par des etoiles '*'
Ici aussi, toutes les ressources RH trouvées seront regroupées
en un seul fichier, les lignes ''pre cmd en premier, les scrpits
RH trouvés dans le code RapidQ ensuite.
Très peu testé mais devrait fonctionner si les lignes de ressource
respectent la syntaxe des ressources Resource Hacker, voir le doc
Resource Hacker ; il s'agit d'un fichier .hlp qui n'est plus reconnu
par Vista, Windows 7, ... Telechargez la solution chez Microsoft :
http://support.microsoft.com/kb/917607
Voir les exemples \Examples\HowTo\How_To_Resources_...
===================================================================
------------------
Lignes ''pre cmd
------------------
Le séparateur dans les lignes ''pre est l'espace, un seul, plusieurs
espaces successifs peut causer une erreur.
Les lignes ''pre doivent se trouver dans les 50 premières lignes de
votre code principale RapidQ, juste après les lignes de commentaires
de préférence. Dans le compte de ces 50 lignes, les lignes de
commentaire et les lignes contenant un ''pre ne sont pas prises en
compte. Le scannage pour des lignes ''pre s'arrête si une ligne
''pre end est rencontrée ou si un End Of File (EOF) est rencontré
(fin de fichier).
La ligne PRECOMPILER_BEFORE_LINE=50 de FBinRQ.Ini contrôle
ce nombre de lignes scannées à la recherche de ''pre
''pre est 'case sensitive' les autres mots clés/options ne le sont pas
La valeurs des options des lignes ''pre cmd sont définies par défaut
dans le fichier FBinRQ.Ini. Dans les distributions, elles sont définies
pour compiler TOUS les codes RapidQ existants en pseudo standalone avec
une console, de manière à ce que tous les codes RapidQ existants compilent
sans modification. Si la dll RapidQ32.Dll utilisée n'est pas patchée
avec le code en ANNEXE 1 à ce fichier, certains mots clés utilisés dans
les consoles ne fonctionneront pas : Locate, Inkey$ et quelques autres.
En gros seul print fonctionne sans le Patch.
Vous pouvez modifier la valeur par défaut des options des lignes ''pre
en éditant le fichier FBinRQ.Ini qui se trouve dans le même répertoire
que FBinRQ.Exe. Il est ainsi possible de définir vos propres options
par defaut. Voir Mon FBinRQ.ini en ANNEXE 2
A l'exception du mot clé ''pre, les autres options ne sont pas 'case
sensitive' : ''pre cmd con ou ''pre cmd conSole ou ''pre cmd noCON
ou ''pre cmd NoCONsole sont equivalents
L'orthographe des options n'est pas vérifiée, un mot clé non reconnu est
simplement passé - pas de message d'erreur FBinRQ passe au suivant -, pour
annuler une option il suffit donc de lui ajouter un caractère en entête ou
en queue. C'est très pratique 'noCON est ignoré, un moyen simple, rapide
et très très très utile pour annuler provisoirement une option.
Exemple:
--------
''pre cmd opt noenc DirIcon noKill 'upx 'adddll exe 'nofbre
''pre end
opt dit à RC.EXE d'optimiser le bytecode (compilation ~2X plus lente,
code ~2X plus court) Comme $OPTIMIZE ON
noEnc reset le flag encrypt. Le bytecode ne sera pas encrypté
DirIcon le premier fichier .Ico rencontré dans le répertoire du code
RapidQ principal est utilisé comme icone pour l'application.
Pas de limite de taille. Avec la version V109 des dll patchées
de Snakedile, cette icone sera autamatiquement héritée par le
Form.
noKill les fichiers crées (?10) lors de la compilation ne seront pas effacé
à la fin de la compilation (Nécéssaires pour certain debuggage).
'upx upx est commenté, il sera ignoré. Pour le revalider, il suffit
d'enlever l'apostrophe. La valeur de l'option sera celle de
FBinRQ.Ini (pas nésessairement noupx).
'adddll adddll est commenté : il sera donc ignoré
exe créera un executable
'nofbre nofbre est commenté : sera ignoré
Pourquoi le prefixe 'no' ? Il permet de ressetter une option settée pas
default dans FBinRQ.Ini
' -------------------------------------------------------------
Les functions "+" "-" "Date$" "Time$" "Timer" "First"
' -------------------------------------------------------------
''pre +, ''pre -, ''pre date$, ''pre Times, ''pre timer,
''pre first
Un exemple est très clair :-) ?
Dans les 50 premières lignes de codes du fichier principal de votre
code RapidQ, une ligne contenant
''pre +, ''pre -, ''pre date$, ''pre Times, ''pre timer, ''pre first
sera modifiée selon la ''pre fonction. Exemples :
DefStr sCompilationNumero = "10" ''pre + 1 0
DefStr sDecompte = "100000" ''pre - 1 0
DefStr sHeureDeCompilation = "" ''pre time$
DefStr sDateDeCompilation = "" ''pre date$
DefStr sPremiereCompile = "" ''pre first
DefStr sRQ_Timer = "" ''pre timer
Lorsqu'on utilise les fontions ''pre + et ''pre -, il faut ajouter
le nombre de decimales affichées exemple :
DefStr sCompteLesCompilations = "10.000" ''pre +0.001 3
On ajoute 0.001 à 10.000 à la compilation suivante 0.0001 à 10.001 etc
sans le '3' 10.690 est affichée 10.69
Tous les noms de chaines sont aurorisés. Ces chaines peuvent être
initialisées ici = "10.000"
Ces fonctions peuvent incrémenter un compteur de compilations
(build count) ''pre + 0.001 3, établir une date de denière
compilation ''pre date$, une heure de derniere compilation
''pre time$, une date de premiere compilation ''pre first, un
Timer de dernière compilation. Ces changements doivent être sauvés
dans le fichier ou il se trouve : le fichier principal de code
RapidQ, ce fichier sera donc surécrit et sauvé. Une version de ce
fichier est sauvée avant que le fichier soit surécrit, par défaut
l'option kill efface ce fichier de sauvegarde sauf si l'option
''pre cmd bk est donnée. Le nom du fichier sauvegardé est
NomDeFichierBas.Bck
'
' Un Exemples beaucoup plus simple à comprendre :
' -----------
''pre cmd console encrypt opt exe run
DefStr sBuild = "0" ''pre + 1 0
DefStr sSusbtract = "100000" ''pre - 1 0
DefStr sCompileTime = "" ''pre time$
DefStr sCompileTimer = "" ''pre timer
DefStr sCompileDate = "" ''pre date$
DefStr sBuildCount = "10.000" ''pre + 0.001 3
''pre end
' =============================================================================
+++++++++++++
ANNEXE 1 +++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Si vous souhaitez patcher RapidQ32.Dll afin que les codes console
compilés fonctionnent sans faille, compilez et executez le code suivant
et sélectionnez la Dll à patcher. Avec ce patch, ajouter CLS en tête de vos
codes console rétablira toutes les commandes originales des consoles.
' ----- Début du code de Patch de DLL -----------------------------------------
' -----------------------------------------------------------------------------
' PATCH RAPIDQ32.DLL CLS to Call 'Init Console' Jan 28th, 2010 Jacques
' Resout le pb RQPC/FBinRQ avec les mots console (Inkey$, Locate, ... )
' COR: mov [esp+2], eax >>> mov [esp], eax
' V_04: quelques différence mineures avec la versions _03 du 28 Jan 2009
' -----------------------------------------------------------------------------
'
''pre cmd tiny run enc opt exe con kill diricon
'
$ESCAPECHARS ON
$TYPECHECK ON
$INCLUDE "RAPIDQ.INC"
'
Cls
'
SetConsoleTitle "Patch Code pour RapidQ32.Dll Cls"
'
' Code Original dans RapidQ32.Dll sera Replacé
' ----------------------------------------------
' 00486A7C 83 C4 F8 add esp,FFFFFFF8h
' 00486A7F 66 C7 04 24 00 00 mov word ptr [esp],0000h
' 00486A85 66 C7 44 24 02 00 00 mov word ptr [esp+02h],0000h
'
DefStr sOrgCode = Chr$(&H83) & Chr$(&HC4) & Chr$(&HF8) _
& Chr$(&H66) & Chr$(&HC7) & Chr$(&H04) & Chr$(&H24) & Chr$(&H00) & Chr$(&H00) _
& Chr$(&H66) & Chr$(&HC7) & Chr$(&H44) & Chr$(&H24) & Chr$(&H02) & Chr$(&H00) & Chr$(&H00)
' (length 16 bytes)
' Nouveau code pour RapidQ32.Dll
' ------------------------------
' 00486A7C E8(1B010000) call 0x011B ; vers 0x00466B9C = Init console
' 00486A80 83C4F8 add esp, byte -8
' 31C0 xor eax, eax
' 890424 mov [esp], eax
'
DefStr sNewCode = Chr$(&HE8) & Chr$(&H1B) & Chr$(&H01) & Chr$(00) & Chr$(00) _
& Chr$(&H83) & Chr$(&HC4) & Chr$(&HF8) _
& Chr$(&H31) & Chr$(&HC0) _
& Chr$(&H89) & Chr$(&H04) & Chr$(&H24) _
& Chr$(&H90) & Chr$(&H90) & Chr$(&H90) ' nop nop nop (longueur 16 bytes)
'
PATCHFILE:
'
' SELECTIONNE LA DLL A PATCHER
' ----------------------------
Dim OpenDialog AS QOpenDialog
DefStr sOldDir, sFileDll
OpenDialog.Filter = "Dll files|*.Dll|All Files|*.*"
OpenDialog.FilterIndex = 1
sOldDir = CurDir$
OpenDialog.InitialDir = "d:\\"
If OpenDialog.Execute Then
sFileDll = OpenDialog.FileName
Else
ShowMessage ("Vous n'avez sélectionnez aucun fichier\n\n I QUIT QUIT.")
Application.Terminate
End If
ChDir sOldDir
'
' Ouvre le fichier RapidQ32*.Dll à patcher
' ----------------------------------------
Dim fileDll As QFileStream
DefStr sDll
DefInt ptrCode
'
With fileDll
If .Open (sFileDll, fmOpenReadWrite) <> 0 then
If .Size < 500000 Then
PRINT "\n\n DECOMPRESSEZ LA DLL D'ABORD \"UPX -d\" : RIEN FAIT"
.Close
Goto FINISHED
End IF
sDll = .ReadBinStr(.Size)
If Instr (sDll, sNewCode) <> 0 Then ' Jan 2010
Print "\n\n DLL déja Patchée : RIEN FAIT"
Goto FINISHED
End If
ptrCode = Instr (sDll, sOrgCode)
If ptrCode > 0 Then
Print "\n\n Trouvé le code à remplacer en : &H" & Hex$(ptrCode - 1)
If Instr (ptrCode + 15, sDll, sOrgCode) <> 0 Then
ShowMessage ("\n\n Le code à remplacer à été trouvé deux fois ??\n\nPas de solution à ça.\n\n JE QUITTE, RIEN FAIT")
Application.Terminate
End If
' Copy Patch in Dll
.Position = ptrCode - 1
.WriteBinStr (sNewCode, 16)
Print "\n\nRemplacement du code fait"
Else
Print "\n\nJe ne trouve pas le code à remplacer\n\n Terniné : rien fait"
End If
.Close
Else ' Jan 2010
Print "\n\nImpossible d'ouvrir le fichier : \"";sFileDll;"\""
Print " PROBABLEMENT DEJA OUVERT PAZR 'MOI' OU UNE AUTRE APPLICATION"
End If
End With
'
FINISHED:
' PATCH ANOTHER DLL OR NOT
If MessageDlg("Voulez patcher une autre Dll ???", mtConfirmation, mbOK OR mbNo, 0) <> IdOk Then
Application.Terminate
End If
'
Goto PATCHFILE
' -----------------------------------------------------------------------------
' ---- Fin du code patch de Dll -----------------------------------------------
+++++++++++++
ANNEXE 2 +++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' ====== Mon FBinRQ.Ini ====================
[RAPIDQ PATH FILE]
RCEXE_PATHFILENAME=d:\Rapid-Q\RC_107.Exe
RQLIBS_DIR=d:\Rapid-Q\Libs
RQINC_DIR=d:\Rapid-Q\Includes
[FREEBASIC PATH]
FB_ROOT_DIR=d:\FreeBasic_020b\
FB_LIB_DIR=d:\FreeBasic_020b\Lib
FB_INC_DIR=d:\FreeBasic_020b\Inc
[COMPILING OPTIONS]
FLAG_ENCRYPT=0
FLAG_CONSOLE=1
FLAG_RUN=1
FLAG_CREATE_EXE=1
FLAG_OPTIMIZE=0
FLAG_VERBOSE=0
FLAG_SHOW_COMPILER_OUTPUT=1
FLAG_FBRECOMPILE=1
FLAG_KILL_FILES=0
FLAG_ADDDLL=0
FLAG_UPX=0
FLAG_FB16=0
FLAG_LANG_DEPRECATED=0
FLAG_LANG_FB=0
FLAG_LANG_FB_LITE=0
FLAG_LANG_QB=0
FLAG_DIRICON=1
FLAG_BEEP=1
FLAG_SHOW_WARNINGS=0
FLAG_FORCE_GUI_DEFAULT_ICON=0
FLAG_FB_TIMOUT=1
FLAG_COUNTBUILDS=1
FLAG_DEFAULT_MANIFEST=0
FLAG_BCK=0
[COMPILING PARAMATER]
WAIT_TIME_FILE_EXISTS=2
PRECOMPILER_BEFORE_LINE=50
PATH_FILES_OK_PRESENT=1
EMBEDDED_DLL_NAME=RQ32.DLL
FLAG_USE_RAPIDQEX=1
[FINAL COMPILE BEEP]
FREQ_SUCCESS=3000
DURA_SUCCESS=3
FREQ_ERROR=500
DURA_ERROR=6
[OUTPUT WINDOW]
OUTPUT_WINDOW_TOP=181
OUTPUT_WINDOW_LEFT=116
OUTPUT_WINDOW_WIDTH=1408
OUTPUT_WINDOW_HEIGHT=677
OUTPUT_WINDOW_FONT_COLOR=8388608
OUTPUT_WINDOW_COLOR=15719391
OUTPUT_WINDOW_FONT_SIZE=12
OUTPUT_WINDOW_ERROR_FONT_COLOR=8388608
OUTPUT_WINDOW_ERROR_COLOR=16637695
[HELP_WINDOW]
HELP_WINDOW_COLOR=12316352
HELP_WINDOW_FONT_COLOR=8388608
HELP_WINDOW_WIDTH=850
HELP_WINDOW_HEIGHT=600
HELP_WINDOW_FONT_SIZE=12
' === FIN Mon FBinRQ.Ini ===================
+++++++++++++
ANNEXE 3 +++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' ------------------------------------------------------------------------
' ReadMeFirst Installe FBinRQ April 20th, 2009 Jacques
' ------------------------------------------------------------------------
FBinRQ requière une version de FreeBasic installée sur votre ordinateur.
FreeBasic s'installe très facilement, il suffit de lancer
FreeBASIC-v0.20.0b-win32.exe et de répondre OUI
Je recommande juste de ne pas l'installer sur votre disque C:
Fichiers devant se trouver dans votre répertoire FBinRQ (voir çi dessous
pour les adresses de téléchargement):
- FBinRQ.Exe dans cette distribution
- FBinRQ.Ini dans cette distribution
- FBinRQ_IDE.Exe dans cette distribution (facultatif)
- ResHacker.Exe at http://angusj.com/resourcehacker/
- Upx.Exe http://upx.sourceforge.net/ (ou une autre version)
- RQ32.Dll RapidQ32.Dll renommée RQ32.Dll Snakedile V109 recommendée
à http://www.freewebs.com/snakedile/
Détails pour les nuls
---------------------
- créer un répertoire \FBinRQ (de préférence dans votre rérertoire RapidQ)
- copiez-y FBinRQ.Exe, FBinRQ.Ini et FBinRQ_IDE.Exe de cette distribution
Il est recommandé de copier tous les fichiers de cette distribution avec
leurs repertoire dans ce répertoire. Cela vous aidera à connaître FBinRQ.
- télécharger ResHacker à http://angusj.com/resourcehacker/
Cette version de Resource Hacker est disponible depuis 2002 et est utilisée
par des milliers de personnes ; si elle était virusée, ce se saurait
maintenant. Seul le fichier ResHacker.Exe doit être copié dans le
répertoire /FBinRQ, ResHacker.Hlp est utile aussi mais n'est pas
indispensable (Sous Vista, il faut installer un logiciel pour que ces
fichiers .Hlp soit ouvrable). Ne vous laissez pas impressionner pas le
mot 'hacker'.
- télécharger UPX à http://upx.sourceforge.net/ dernière version ou autre
adresse du fichier : http://upx.sourceforge.net/download/upx303w.zip
Copiez uniquement UPX.EXE dans le répertoire \FBinRQ
- copier RapidQ32.Dll dans le répertoire \FBinRQ et le renommer RQ32.Dll
FbinRQ préfère RapidQ32.Dll V109 de Snakedile à télécharger à
http://www.freewebs.com/snakedile/ ou directement à
http://www.freewebs.com/snakedile/snakedile109.zip
- télécharger FREEBASIC V020B à http://www.freebasic.net/ ou à
http://www.freebasic.net/forum/viewtopic.php?t=11955 ou directement à
http://downloads.sourceforge.net/fbc/Fr … e?download
Executez simplement le fichier d'installation, je suggére d'installer
FreeBasic dans d:\FreeBasic_V020B\ ...
Télecharger aussi l'excellente doc FreeBasic à
http://downloads.sourceforge.net/fbc/FB … p?download
- vous devez éditer FBinRQ.Ini et adapter le nom des répertoires RapidQ et
FreeBasic afin qu'ils correspondent a vos installations. Ceci se fait dans
les six lignes suivantes en tête de FBinRQ.Ini
[RAPIDQ PATH FILE]
RCEXE_PATHFILENAME=d:\Rapid-Q\RC_107.Exe
RQLIBS_DIR=d:\Rapid-Q\Libs
RQINC_DIR=d:\Rapid-Q\Includes
[FREEBASIC PATH]
FB_ROOT_DIR=d:\FreeBasic_020B\
FB_LIB_DIR=d:\FreeBasic_020B\Lib
FB_INC_DIR=d:\FreeBasic_020B\Inc
Ne changez rien aux lignes suivantes tant que vous n'avez pas fait quelques
tests de compilation avec FBinRQ
Il est fortement recommandé que vous copiez une version de RapidQ32.Dll dans
votre répertoire système c:\Windows (ou autre). Ceci vous permettra de créer
des exécutables 'Tiny' sans qu'il soit nécessaire de copier RapidQ32.Dll
dans leurs répertoires.
Vous pouvez maintenant lancer FBinRQ_IDE.Exe et compiler les exemples et
tous vos code RapidQ. Pour des code console contenant les mots Locate,
Inkey$, ... il faudra patcher RapidQ32.Dll comme indiqué ci dessus.
Print fonctionne sans patchage de RapidQ32.Dll.
FBinRQ_IDE.Exe est une simple IDE qui devrait vous aider à commencer à
utiliser FBinRQ, après il faudra lancer FBinRQ depuis votre IDE favorite
FREEQ, JFE, ...
Compatibilité avec les versions FreeBasic :
Tous les exemples ont été compliés avec FB017a et FB020B sans problèmes.
Avec FB016, il faut parfois ajouter ''pre cmd FB016 (cela ajoute simplement
'option byval' et 'option explicit' en tête du code du 'lanceur de bytecode'
ecrit ici en Freebasic).
Au démarrage FBinRQ vérifie que tous les fichiers nécessaires et tous les
répertoires configurés existent.
Jacques
--------------------------------------------------------------------------
Hors ligne
FBinRQ.Exe V0883 avec doc en français inclue
http://users.teledisnet.be/web/jph01696 … 883_FR.zip
Hors ligne
binjour
puisque tu est là Jacques
que fait de special , le FBinRQTiny.exe ???....
merci
A+
papi
Hors ligne
papi a écrit:
binjour
puisque tu est là Jacques
que fait de special , le FBinRQTiny.exe ???....
merci
A+
papi
Me souvenais plus où on trouve ça ![]()
Bon, dans la version 0790, FBinRQ.Exe est une compilation faite avec FBinRQ et l'option ''pre cmd adddll, elle contient donc RapidQ32.Dll qui est 'recrachée' à l'exécution. Cette version ne nécessite pas de copier RapidQ32.Dll dans le répertoire de Windows ou dans le répertoire de FBinRQ.Exe ... c'est plus simple pour les débutants ... s'il y en a
. Cette version fait 400K.
FBinRQTiny.Exe est la compilation du même code mais faite avec ''pre cmd noadddll, c'est à dire que RapidQ32.Dll n'est pas inclue, il faudra donc que l'utilisateur copie lui même RapidQ32.Dll dans le repertoire de Window, il pourra alors renommer FBinRQTiny.Exe en FBinRQ.Exe ... qui devrait être un chouia plus rapide. Cette version fait 75K.
Jacques
Hors ligne