Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Créer un EXE dans un programme Panoramic ? | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Créer un EXE dans un programme Panoramic ? Jeu 27 Oct 2016 - 16:29 | |
| J'ai fait un petit code en Panoramic pur qui peut créer un EXE à partir d'un source Panoramic quelconque. Est-ce que ça iintéresse quelqu'un ? En Panoramic pur, c'est assez lent (30 à 40 secondes). Avec l'utilisation d'une fonction dans KGF.dll, ça pourrait être réduit à une seconde. Voici la version en Panoramic pur (il faut donner le nom de l'EXE en sortie dans une variable, et le source est à copier dans le mémo de gauche. Le mémo de droite, juste pour contrôle, montre le source encodé façon Panoramic: - Code:
-
label encoder
dim nom$
full_space 0 alpha 1 : top 1,10 : left 1,10 : caption 1,"En clair:" alpha 2 : top 2,10 : left 2,520 : caption 2,"Encodé:" memo 11 : top 11,40 : left 11,10 : width 11,500 : height 11,600 : bar_both 11 memo 12 : top 12,40 : left 12,520 : width 12,500 : height 12,600 : bar_both 12 button 21 : top 21,660 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder progress_bar 31 : hide 31 : top 31,690 : left 31,10 : width 31,500
end
encoder: nom$ = "ProgrammeEncode.exe" EncoderSource(nom$) return
sub EncoderSource() ' dim_local res%, prg$ ' dll_on "KGF.dll" ' prg$ = param_value$(0) ' if file_exists(nom$)=1 then file_delete nom$ ' res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$)) ' message "res%="+str$(res%) ' dll_off ' exit_sub
dim_local tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$ dim_local p%, s$, t$, c%, m%, vide%(64000) dim decoder%(255)
data 0, 22, 21, 20, 19, 18, 17, 16, 31, 30, 0, 28, 27, 0, 25, 24 data 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 data 55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56 data 39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40 data 87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88 data 71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72 data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120 data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104 data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152 data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136 data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184 data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168 data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216 data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200 data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248 data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232
for i% = 0 to 255 read decoder%(i%) next i%
prg$ = param_value$(0) filebin_open_read 2,prg$ m% = filebin_size(2) - 8 filebin_position 2,m% filebin_block_read 2,4,vide%(0) n% = 0 for i%=3 to 0 step -1 n% = n%*256 + vide%(i%) next i% m% = m% - n% filebin_position 2,0 if file_exists(nom$)=1 then file_delete nom$ filebin_open_write 1,nom$ max 31,m% position 31,m% show 31 while 64000<=m% filebin_block_read 2,64000,vide%(0) filebin_block_write 1,64000,vide%(0) m% = m% - 64000 position 31,m% end_while if m%>0 filebin_block_read 2,m%,vide%(0) filebin_block_write 1,m%,vide%(0) end_if filebin_close 2 position 31,0 ' message "phase 1 ok"
out$ = "" clear 12 cnt% = 0 if count(11)>0 for i%=1 to count(11) s$ = item_read$(11,i%) t$ = "" if len(s$)>0 for k%=1 to len(s$) n% = asc(mid$(s$,k%,1)) t$ = t$ +chr$(decoder%(n%)) vide%(k%-1) = decoder%(n%) next k% end_if item_add 12,t$ cnt% = cnt% + len(t$) + 1 n% = len(t$) vide%(n%) = 0 filebin_block_write 1,n%+1,vide%(0) next i% end_if
n% = cnt% for i%=0 to 3 c% = bin_and(n%,255) n% = int(n%/256) vide%(i%) = c% next i% vide%(4) = 51 vide%(5) = 66 vide%(6) = 46 vide%(7) = 70 filebin_block_write 1,8,vide%(0) filebin_close 1 ' message "phase 2 ok" hide 31 end_sub
Dernière édition par Klaus le Ven 28 Oct 2016 - 0:48, édité 2 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Jeu 27 Oct 2016 - 19:55 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Jeu 27 Oct 2016 - 21:10 | |
| Je suis intéressé mais condamné a répondre depuis une tablette. J' ai un squatteur sur mon ordi... ...vive les vacances scolaires . | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Jeu 27 Oct 2016 - 23:56 | |
| @Minibug: Exact ! J'ai déterminé un peu rapidement la table d'encodage... Désolé. Cette fois, ça marche ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 0:51 | |
| Ce n'était toujours pas bon. J'ai refait la partie "table de conversion", et maintenant, on peut encoder le présent programme et exécuter le résultat qui est identique à ce que ferait l'EXE généré par l'éditeur de Panoramic.
Tel quel, toujours en 100 % Panoramic, le code est utilisable pour n'importe quel IDE écrit en Panoramic pour exécuter directement, sans avoir besoin d'une ligne de commande par Panoramic.exe. C'est un gros progrès.
Je suis en train de faire une fonction DLL pour faire la même chose, mais en beaucoup plus rapide. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 3:09 | |
| Voici la dernière version, utilisant la toute nouvelle fonction DLL pour faire le travail (télécharger KGF.dll avant d'utiliser !): - Code:
-
label encoder
dim nom$
full_space 0 alpha 1 : top 1,40 : left 1,10 : caption 1,"En clair:" alpha 2 : top 2,40 : left 2,520 : caption 2,"Encodé:" memo 11 : top 11,70 : left 11,10 : width 11,500 : height 11,600 : bar_both 11 memo 12 : top 12,70 : left 12,520 : width 12,500 : height 12,600 : bar_both 12 button 21 : top 21,690 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder progress_bar 31 : hide 31 : top 31,720 : left 31,10 : width 31,500 check 41 : top 41,10 : left 41,100 : width 41,400 : caption 41,"Exécuter avec KGF.dll" font_size 41,16 : font_bold 41 : font_color 41,255,0,0 end
encoder: nom$ = "ProgrammeEncode.exe" EncoderSource(nom$) return
sub EncoderSource() if checked(41)=1 dim_local res%, prg$ dll_on "KGF.dll" prg$ = param_value$(0) if file_exists(nom$)=1 then file_delete nom$ res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$)) message "res%="+str$(res%) dll_off exit_sub end_if
dim_local tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$ dim_local p%, s$, t$, c%, m%, vide%(64000) dim decoder%(255)
data 0, 22, 21, 20, 19, 18, 17, 16, 31, 30, 0, 28, 27, 0, 25, 24 data 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 data 55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56 data 39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40 data 87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88 data 71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72 data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120 data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104 data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152 data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136 data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184 data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168 data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216 data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200 data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248 data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232
for i% = 0 to 255 read decoder%(i%) next i%
prg$ = param_value$(0) filebin_open_read 2,prg$ m% = filebin_size(2) - 8 filebin_position 2,m% filebin_block_read 2,4,vide%(0) n% = 0 for i%=3 to 0 step -1 n% = n%*256 + vide%(i%) next i% m% = m% - n% filebin_position 2,0 if file_exists(nom$)=1 then file_delete nom$ filebin_open_write 1,nom$ max 31,m% position 31,m% show 31 while 64000<=m% filebin_block_read 2,64000,vide%(0) filebin_block_write 1,64000,vide%(0) m% = m% - 64000 position 31,m% end_while if m%>0 filebin_block_read 2,m%,vide%(0) filebin_block_write 1,m%,vide%(0) end_if filebin_close 2 position 31,0 ' message "phase 1 ok"
out$ = "" clear 12 cnt% = 0 if count(11)>0 for i%=1 to count(11) s$ = item_read$(11,i%) t$ = "" if len(s$)>0 for k%=1 to len(s$) n% = asc(mid$(s$,k%,1)) t$ = t$ +chr$(decoder%(n%)) vide%(k%-1) = decoder%(n%) next k% end_if item_add 12,t$ cnt% = cnt% + len(t$) + 1 n% = len(t$) vide%(n%) = 0 filebin_block_write 1,n%+1,vide%(0) next i% end_if
n% = cnt% for i%=0 to 3 c% = bin_and(n%,255) n% = int(n%/256) vide%(i%) = c% next i% vide%(4) = 51 vide%(5) = 66 vide%(6) = 46 vide%(7) = 70 filebin_block_write 1,8,vide%(0) filebin_close 1 ' message "phase 2 ok" hide 31 end_sub
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 8:26 | |
| Merci Klaus, ça c'est vraiment une super idée !
Du coup je vais pouvoir rajouter la conversion en EXE à GPP. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 9:54 | |
| Oui, c'était un peu l'idée... Moi aussi, je vais m'en servir pour l'ajouter à Synedit_Editor. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 28 Oct 2016 - 11:01 | |
| Bravo Klaus ! Encore une ouverture pour panoramic. J' ai une idée derrière la tête et dès qu' elle passe devant je la mettrai sur le forum... | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 12:56 | |
| bjr a tous Je n'ai pas très bien compris ton programme Peut tu donner plus d'explication et comment s'en servir merci cordialement | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 13:05 | |
| Mon programme est simplement une démonstration de la nouvelle fonction DLL: CompilePanoramicToEXE.
Cette fonction permet de prendre un source Panoramic quelconque, contenu dans un mémo Panoramic, et de générer le fichier EXE correspondant, directement sans passer par l'éditeur de Panoramic. Jusqu'à maintenant, il était impossible d'exécuter du code Panoramic généré par un programme Panoramic, directement, sans passer, soit par l'éditeur, soir par Panoramic.exe.
Cette restriction est maintenant levée et on peut avoir des programmes Panoramic qui génèrent un source Panoramic et l'exécutent directement. Cela est surtout pensé pour des logiciels du genre IDE, comme Synedit_Editor ou GPP, mais cela peut servir plus largement à des programmes qui veulent faire du "scripting", donc la génération et l'exécution de code, dynamiquement.
Mon programme de démo fonctionne comme ceci: - au lancement, un écran s'affiche, avec les champs suivants: 1 check_box pour choisir l'utilisation de la DLL si cochée (très rapide, utilise KGF.dll), ou un code en 100 % Panoramic parfaitement fonctionnel (lent, entre 30 et 50 secondes chaque fois) 1 mémo à gauche dans lequel on colle ou on saisit le code à exécuter 1 mémo à droite qui sera rempli par le code source encodé pour Panoramic (juste pour contrôle, sans utilité fonctionnelle) 1 bouton de lancement
Donc, le fonctionnement est simple: coller le code dans le mémo de gauche, choisir de cocher la check_box ou pas, puis cliquer sur le bouton de lancement. | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 14:41 | |
| ok klaus j'ai compris son system dommage que l'EX ne soit pas compilé! merci | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 16:00 | |
| @klaus Si ça peux te servir, il est possible de générer la table d'encodage, c'est une fonction XOR. Une demo qui compare la table lu et celle généré: - Code:
-
full_space 0 font_name 0,"dejavu sans mono" dim i%,k%,c$
data 0, 22, 21, 20, 19, 18, 17, 16, 31, 30, 0, 28, 27, 0, 25, 24 data 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 data 55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56 data 39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40 data 87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88 data 71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72 data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120 data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104 data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152 data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136 data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184 data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168 data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216 data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200 data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248 data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232
' lecture de la table de codage print "LECTURE DES DATAS:" for i%=0 to 255 ' lire read k% ' ' affichage c$=str$(k%) if k%<10 then c$="00"+str$(k%) if k%>9 and k%<100 then c$="0"+str$(k%) ' print c$;" "; if mod(i%+1,16)=0 then print next i%
print : print
' générer la table de codage print "CODAGE NUMERIQUE:" for i%=0 to 255 ' encoder k%=bin_xor(i%,23) if i%=0 or i%=10 or i%=13 then k%=0 ' ' affichage c$=str$(k%) if k%<10 then c$="00"+str$(k%) if k%>9 and k%<100 then c$="0"+str$(k%) ' print c$;" "; if mod(i%+1,16)=0 then print next i% | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 16:10 | |
| Merci, Silverman ! C'est intéressant, et je vais intégrer cela au lieu de la longue liste des DATA.
EDIT
Bravo ! Ca marche. Je vais l'intégrer dans la version Panoramic et dans la version DLL. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 16:39 | |
| C'est intégré et ça marche en Panoramic pur et en DLL. J'ai donc mis à jour également Synedit_Editor et KGF.dll, ainsi que le programme de démo que voici: - Code:
-
label encoder
dim nom$
full_space 0 alpha 1 : top 1,40 : left 1,10 : caption 1,"En clair:" alpha 2 : top 2,40 : left 2,520 : caption 2,"Encodé:" memo 11 : top 11,70 : left 11,10 : width 11,500 : height 11,600 : bar_both 11 memo 12 : top 12,70 : left 12,520 : width 12,500 : height 12,600 : bar_both 12 button 21 : top 21,690 : left 21,300 : caption 21,"Encoder" : on_click 21,encoder progress_bar 31 : hide 31 : top 31,720 : left 31,10 : width 31,500 check 41 : top 41,10 : left 41,100 : width 41,400 : caption 41,"Exécuter avec KGF.dll" font_size 41,16 : font_bold 41 : font_color 41,255,0,0 end
encoder: nom$ = "ProgrammeEncode.exe" EncoderSource(nom$) return
sub EncoderSource() if checked(41)=1 dim_local res%, prg$ dll_on "KGF.dll" prg$ = param_value$(0) if file_exists(nom$)=1 then file_delete nom$ res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(11),adr(nom$)) message "res%="+str$(res%) dll_off exit_sub end_if
dim_local tin$, tout$, prg$, i%, k%, n%, n1%, cnt%, out$ dim_local p%, s$, t$, c%, m%, vide%(64000) dim decoder%(255)
' data 0, 22, 21, 20, 19, 18, 17, 16, 31, 30, 0, 28, 27, 0, 25, 24 ' data 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 ' data 55, 54, 53, 52, 51, 50, 49, 48, 63, 62, 61, 60, 59, 58, 57, 56 ' data 39, 38, 37, 36, 35, 34, 33, 32, 47, 46, 45, 44, 43, 42, 41, 40 ' data 87, 86, 85, 84, 83, 82, 81, 80, 95, 94, 93, 92, 91, 90, 89, 88 ' data 71, 70, 69, 68, 67, 66, 65, 64, 79, 78, 77, 76, 75, 74, 73, 72 ' data 119,118,117,116,115,114,113,112,127,126,125,124,123,122,121,120 ' data 103,102,101,100, 99, 98, 97, 96,111,110,109,108,107,106,105,104 ' data 151,150,149,148,147,146,145,144,159,158,157,156,155,154,153,152 ' data 135,134,133,132,131,130,129,128,143,142,141,140,139,138,137,136 ' data 183,182,181,180,179,178,177,176,191,190,189,188,187,186,185,184 ' data 167,166,165,164,163,162,161,160,175,174,173,172,171,170,169,168 ' data 215,214,213,212,211,210,209,208,223,222,221,220,219,218,217,216 ' data 199,198,197,196,195,194,193,192,207,206,205,204,203,202,201,200 ' data 247,246,245,244,243,242,241,240,255,254,253,252,251,250,249,248 ' data 231,230,229,228,227,226,225,224,239,238,237,236,235,234,233,232
' for i% = 0 to 255 ' read decoder%(i%) ' next i%
for i%=0 to 255 k%=bin_xor(i%,23) if i%=0 or i%=10 or i%=13 then k%=0 decoder%(i%) = k% next i%
prg$ = param_value$(0) filebin_open_read 2,prg$ m% = filebin_size(2) - 8 filebin_position 2,m% filebin_block_read 2,4,vide%(0) n% = 0 for i%=3 to 0 step -1 n% = n%*256 + vide%(i%) next i% m% = m% - n% filebin_position 2,0 if file_exists(nom$)=1 then file_delete nom$ filebin_open_write 1,nom$ max 31,m% position 31,m% show 31 while 64000<=m% filebin_block_read 2,64000,vide%(0) filebin_block_write 1,64000,vide%(0) m% = m% - 64000 position 31,m% end_while if m%>0 filebin_block_read 2,m%,vide%(0) filebin_block_write 1,m%,vide%(0) end_if filebin_close 2 position 31,0 ' message "phase 1 ok"
out$ = "" clear 12 cnt% = 0 if count(11)>0 for i%=1 to count(11) s$ = item_read$(11,i%) t$ = "" if len(s$)>0 for k%=1 to len(s$) n% = asc(mid$(s$,k%,1)) t$ = t$ +chr$(decoder%(n%)) vide%(k%-1) = decoder%(n%) next k% end_if item_add 12,t$ cnt% = cnt% + len(t$) + 1 n% = len(t$) vide%(n%) = 0 filebin_block_write 1,n%+1,vide%(0) next i% end_if
n% = cnt% for i%=0 to 3 c% = bin_and(n%,255) n% = int(n%/256) vide%(i%) = c% next i% vide%(4) = 51 vide%(5) = 66 vide%(6) = 46 vide%(7) = 70 filebin_block_write 1,8,vide%(0) filebin_close 1 ' message "phase 2 ok" hide 31 end_sub
| |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 18:07 | |
| J'ai une question bête, pourquoi ne pas utiliser 'file_copy' pour recopier l'exe du ...\temp, à la place des 'file_bin'? En tout cas, c'est une belle trouvaille! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 18:54 | |
| Parce que, justement, ce n'est pas le fichier entier qu'il faut copier.
Il faut juste copier le début du fichier. Le nombre d'octets à copier est égal à (la taille du fichier) -8 -(taille du code source Panoramic) du programme à l'origine du EXE servant d'origine. Et la taille de ce code se trouve dans les octets (taille du fichier)-8 et les 3 octets suivants.
Il font donc recopier le début du fichier EXE, puis installer le nouveau code source, puis copier derrière le nombre d'octets du nouveau code source, sous forme d'un entier de 4 octets, et finalement les 4 derniers octets qui sont une constante. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 20:30 | |
| Klaus,
Pourquoi n'as tu pas préféré partir du choix du nom du programme pour la création de l’exécutable directement ? Est ce que c'est juste pour simplifié ton code ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 20:55 | |
| Mon petit programme est juste une petite, maigre démo, montrant comment appeler la fonction DLL et, pour la partie Panoramic pure, montrer la technique pour le faire. Il n'a pas la prétention d'être un vrai outil - il y a Panoramic_Editor pour cela qui fait ça très bien. Rien n'empêche, dans mon petit code, d'ajouter un petit dialogue ou une fenêtre de sélection pour choisir le nom qui, pour le moment, est codé dans une variable - Code:
-
nom$ = "ProgrammeEncode.exe" L'important, ce sont les points suivants: 1. il faut un "modèle", une source pour le noyau de Panoramic, pour l'interpréteur. Et tout naturellement, j'ai choisi de le copier à partir du programme en cours, et son fichier EXE est déterminé par - Code:
-
prg$ = param_value$(0) 2. le code Panoramic à utiliser est pris dans un mémo qui, dans un programme réel, sera certainement caché par HIDE. Ici, il est visible juste pour la démo. 3. le nom du fichier EXE résultant est dans la variable nom$ qu'on peut charger de multiples façons - chacun le fera à son goût. Dans Synedit_Editor, j'ai utilisé tout naturellement le nom du fichier BAS mémorisé, en remplaçant l'extension par EXE. 4. en utilisant la fonction DLL, ce sont ces 3 éléments qui sont passés en paramètre. La fonction est donc entièrement paramétrée et rien n'est imposée par elle. Ca va même plus loin: la fonction DLL refuse de faire le travail si un des paramètres est invalide, le fichier source inexistant ou le fichier EXE déjà existant - il est de la responsabilité du programme appelant de construire l'environnement correct. J'ai intégré cette fonction dans Synedit_Editor avec une grande facilité: - Code:
-
memo 92 : hide 92 : bar_both 92 : ' mémo pour recevoir le source à compiler en EXE ... ' ici, en cas de frappe F8 ou F9, si la cible de l'outil est $ (dollar): file_load 92,f$ : ' charger le source dans le mémo interne fexe$ = left$(f$,len(f$)-3) + ".exe" : ' nom du fichier EXE à générer if file_exists(fexe$)=1 then file_delete fexe$ : ' supprimer un EXE déjà existant f$ = param_value$(0) : ' prendre le chemin de Synedit_Editor (programme actif) res% = dll_call3("CompilePanoramicToEXE",adr(f$),handle(92),adr(fexe$)) : ' générer le fichier EXE if res%<0 message "Erreur "+str$(res%)+" en génération du fichier EXE" return end_if | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 21:40 | |
| Ok là c'est plus clair ! Merci pour ta réponse Klaus | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Ven 28 Oct 2016 - 22:08 | |
| Et tu verras, si tu fais l'essai: la version avec la fonction DLL est ultra-rapide ! C'est quasiment instantané. C'est un vrai plaisir de générer un EXE "on the fly", comme diraient des Ricains.
Evidemment, tout cela est tributaire du codage de Jack. Cela reste valable tant que Jack ne change pas le principe de codage ni la façon de mémoriser le code dans l'EXE généré par Panoramic_Editor. J'espère que Jack ne prendra pas ombrage de l'initiative que j'ai prise en réalisant cette fonction - elle satisfait une demande qui a été faite depuis longtemps, sur le forum.
Maintenant, il est évident que cela ne s'applique qu'aux programmes lancés par Panoramic_Editor ou générés par lui. Cela ne s'applique pas aux programmes compilés par le compilateur sur lequel Jack travaille, mais ça, c'est une autre histoire. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Sam 29 Oct 2016 - 11:48 | |
| Bonjour klaus et bonjour à tous ! Du coup, voila ma modeste contribution pour ceux qui ne veulent que le nécessaire. C'est vrai que ça parait tellement simple comme ça ! Encore merci pour ton travail Klaus. c'est une pure merveille... - Code:
-
LABEL choix , sortie DIM nom$, exe$ , res%, prg$
CAPTION 0,"CONVERTISSEUR DE FICHIER EXE" : BORDER_HIDE 0 : COLOR 0,0,0,0 LEFT 0,(SCREEN_X-320)/2 : TOP 0,(SCREEN_Y-70)/2 : WIDTH 0,320 : HEIGHT 0,70 ALPHA 1 : LEFT 1,10 : TOP 1,7 : FONT_SIZE 1,12 : CAPTION 1,CAPTION$(0) : FONT_BOLD 1 : COLOR 1,0,0,0 : FONT_COLOR 1,200,200,0 BUTTON 2 : LEFT 2,11 : TOP 2,32 : FONT_SIZE 2,10 : WIDTH 2,240 : HEIGHT 2,28 : CAPTION 2,"Choisir le fichier BAS à convertir" : ON_CLICK 2,choix HINT 2,"Permet la conversion d'un fichier Panoramic"+CHR$(13)+"de type BAS en fichier EXE autonome." BUTTON 3 : LEFT 3,255 : TOP 3,32 : FONT_SIZE 3,10 : WIDTH 3,57 : HEIGHT 3,28 : CAPTION 3,"Sortie" : ON_CLICK 3,sortie HINT 3,"Permet la sortie du programme"+CHR$(13)+"sans aucune modification." ALPHA 5 : HIDE 5 : LEFT 5,10 : TOP 5,35 : FONT_SIZE 5,10 : COLOR 5,0,0,0 : FONT_COLOR 5,220,220,220 OPEN_DIALOG 4 : FILTER 4,"fichiers Panoramic Basic|*.bas" : MEMO 6 : LEFT 6,400 : TOP 6,300 : HIDE 6 END
choix: SHOW 5 : CAPTION 5,"Vérification en cours ..." : HIDE 2 : HIDE 3 : nom$=FILE_NAME$(4) IF FILE_EXISTS(nom$)=0 THEN CAPTION 5,"Fichier introuvable ! Patientez..." : PAUSE 2000 : HIDE 5 : SHOW 2 : SHOW 3 : RETURN IF RIGHT$(LOWER$(nom$),3)<>"bas" THEN CAPTION 5,"Fichier invalide ! Patientez..." : PAUSE 2000 : HIDE 5 : SHOW 2 : SHOW 3 : RETURN exe$=LEFT$(nom$,LEN(nom$)-3)+"EXE" FILE_LOAD 6,nom$ : IF FILE_EXISTS(exe$)=1 THEN FILE_DELETE exe$ CAPTION 5,"Conversion du fichier en cours ..." DLL_ON "D:\BASIC\DLLs\KGF.dll" : prg$ = PARAM_VALUE$(0) res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(6),adr(exe$)) CAPTION 5,"Conversion terminée ! Fermeture du programme..." : PAUSE 2000 TERMINATE
sortie: TERMINATE Et voila le résultat :
Dernière édition par Minibug le Sam 29 Oct 2016 - 17:56, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 29 Oct 2016 - 14:09 | |
| @Minibug, tu pouvais aussi reprendre le "recover source" et avoir les deux sens de conversion... , c'est bon..., je sors... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Sam 29 Oct 2016 - 14:27 | |
| | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Créer un EXE dans un programme Panoramic ? Sam 29 Oct 2016 - 15:55 | |
| J'ai apporté quelques modifications au code. Mise à jour faite au dessus | |
| | | Contenu sponsorisé
| Sujet: Re: Créer un EXE dans un programme Panoramic ? | |
| |
| | | | Créer un EXE dans un programme Panoramic ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |