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 |
|
|
| Des fonctions en Dll . Peek , poke , bin , fix ,shift ... | |
| | Auteur | Message |
---|
enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Lun 6 Juin 2011 - 21:40 | |
| Bonjour, Quelques fonctions supplementaires qui peuvent etre utiles Peek , Poke , InStr avec point de départ , InStr idem + Any , Overwrite string Hex , Fix , IntToBin , ShiftLeft , ShiftRight . Bien sur , c'est moins facile à utiliser avec une Dll qu'en natif . Il y a 1 fichier Zip à telecharger sur file-pasta.com ( 1 Dll et un source avec exemples) . http://www.file-pasta.com/s/1956/fun.zip Bons essais ! Et quelques commentaires sont toujours interessants . A + | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 7 Juin 2011 - 15:24 | |
| | |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 0:03 | |
| Bonjour Merci pour le point d'exclamation . Oui,on peut avoir le source . Il est beaucoup moins sophistiqué que votre test_fft.bas auquel j'ai jeté un coup d'oeil. le code est basé sur Speedo et j'ai laissé les noms des parametres auto , pour si peu de lignes . Les traitements FFT me plaisent toujours , mon coté electronique ( moyen... ). test_fft utilise-t-il des routines exterieures ? ne m'étant pas encore arraché les cheveux à décortiquer les codes. Le code pour la Dll : http://www.file-pasta.com/s/1961/fun_fb.zip | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 0:11 | |
| Super, des nouvelles fonctions, de nouvelles possibilités Bon, j'ai repris le fichier d'exemple (enfin j'ai commencé car je suis fatigué) Voilà, je te mets le code, le but c'est de mieux expliqué les valeurs de départ et ce que l'on fait. (Tu sais, moi je suis un vieux de la programmation alors peek et poke, ça me parle mais je ne suis pas sûr que tout le monde connaisse, donc développer un peu l'usage d'une lecture directe ou d'écriture directe dans la mémoire de valeurs) (le changement du code n'est pas fini mais il est opérationnel) - Code:
-
' ======================================================================================= ' le code ci_dessus est une exemple permettant de comprendre l'utilisation de fun_fb.dll ' Les procedures ainsi que le code de base des fonctions de la Dll est globalement ecrit ' automatiquement à l'aide de Speedo (wizzard d'interfaçage avec FreeBasic). ' Les code a été ensuite modifié pour faciliter la compréhension de l'exemple ' ======================================================================================
dim Resultat, Temp, Var, Var_temp dim i_test%, i_val%, start% ,where% ,len%, shft% dim f_test , f_val dim s_test$, s_val$, AdresseMemoire$, Var$, Result$
label Quit, Suite1, Affiche
dir_change "C:\Program Files\Panoramic Editor V 0.9.20\sources\Fun_fb" dll_on "fun_fb.dll"
AdresseMemoire$ = "000000000" height 0 , screen_y - 25 : width 0 , screen_x - 300
' limite d'un entier: -2147483648 à 2147483647
print " Test des fonctions de la DLL: fun_fb.dll" print: print " ---------------------- test peek nombre integer ----------------------" ' ' Ipeek permet de lire en mémoire la valeur d'un objet de type entier ' La valeur de la variable passée en argument sera stockée dans Resultat ' i_test% = 1000 : Resultat = 0 : ' avant l'appel, Resultat vaut 0 print " Avant l'appel de la fonction: " Var = adr(i_test%) : Var$ = "i_test%": gosub Affiche Var = adr(Resultat): Var$ = "Resultat": gosub Affiche print " Fonction exécutée: Resultat = dll_call1( "+ chr$(34) +"Ipeek"+ chr$(34) +",adr(i_test%) )" Resultat = dll_call1( "Ipeek",adr(i_test%) ) print " Après l'appel de la fonction: " Var = adr(Resultat): Var$ = "Resultat": gosub Affiche
print " ---------------------- test peek nombre flottant ---------------------" ' ' Fpeek permet de lire en mémoire la valeur d'un objet de type réel ' La valeur de la variable 1 passée en argument sera stockée dans la variable 2 ' f_test = 333.33 : f_val = 0 print " Avant l'appel de la fonction: " Var = adr(f_test) : Var$ = "f_test": gosub Affiche Var = adr(f_val) : Var$ = "f_val" : gosub Affiche print " Fonction exécutée: Resultat = dll_call2( "+ chr$(34) +"Fpeek"+ chr$(34) +",adr(f_test),adr(f_val) )" Resultat = dll_call2( "Fpeek",adr(f_test),adr(f_val) ) print " Après l'appel de la fonction: " Var = adr(f_val) : Var$ = "f_val" : gosub Affiche ' Var = adr(Resultat): Var$ = "Resultat": gosub Affiche
print " ---------------------- test peek string ------------------------------" ' ' Speek permet de lire le contenu de s_test$ en mémoire et de le stocker dans s_val$ ' Attention, il faut réserver assez de place pour s_val$ (plus que la taille max de s_test$) ' Pour connaitre la taille de la chaine reçue, chercher le 0 final. ' Penser à ce 0 pour la taille de la chaine de réception ' s_val$ = string$(20," ") : s_test$ = "abcdef" print " Avant l'appel de la fonction: " Var = adr(s_test$) : Var$ = "s_test$": gosub Affiche Var = adr(s_val$) : Var$ = "s_val$" : gosub Affiche print " Fonction exécutée: Resultat = dll_call2 ("+chr$(34)+"Speek"+chr$(34)+", adr(s_test$), adr(s_val$))" Resultat = dll_call2( "Speek",adr(s_test$),adr(s_val$) ) print " Après l'appel de la fonction: " Var = adr(s_val$) : Var$ = "s_val$": gosub Affiche len% = 0 while len% < len(s_val$) len% = len% + 1 if asc(mid$(s_val$ , len% , 1)) = 0 then exit_while end_while print " Longueur de la chaine reçue = " + str$(len% - 1) +" ( Sans compter le '0' final )" : ' Affiche la position du 0 soit 7 dans notre exemple
print:print " ---------------------- test poke integer ----------------------------" ' Ipoke permet d'écrire un entier à un emplacement mémoire donné ' i_test% = 0 : i_val% = 100 : ' on veut écrire la valeur de i_val% (100) à l'adresse de l'entier i_test% print " Avant l'appel de la fonction: " Var = adr(i_test%) : Var$ = "i_test%": gosub Affiche Var = adr(i_val%) : Var$ = "i_val%" : gosub Affiche print " Fonction exécutée: Resultat = dll_call2 ("+chr$(34)+"Ipoke"+chr$(34)+", adr(i_test%), adr(i_val%))" Resultat = dll_call2( "Ipoke",adr(i_test%), i_val% ) print " Après l'appel de la fonction: " Var = adr(i_test%) : Var$ = "i_test%": gosub Affiche
print:print " ---------------------- test poke flottant ---------------------------" ' Fpoke permet d'écrire un réel à un emplacement mémoire donné ' f_test = 0 : f_val = 222.22 : ' on poke print " Avant l'appel de la fonction: " Var = adr(f_test) : Var$ = "f_test": gosub Affiche Var = adr(f_val) : Var$ = "f_val" : gosub Affiche print " Fonction exécutée: Resultat = dll_call2 ("+chr$(34)+"Fpoke"+chr$(34)+", adr(f_test), adr(f_val))" Resultat = dll_call2( "Fpoke",adr(f_test) ,adr(f_val) ) print " Après l'appel de la fonction: " Var = adr(f_test) : Var$ = "f_test": gosub Affiche
print:print " ---------------------- test poke string -----------------------------" ' Spoke permet d'écrire une chaine à un emplacement mémoire donné ' s_test$ = string$(20," ") : s_val$ = "ghijkl" : ' on poke print " Avant l'appel de la fonction: " Var = adr(s_test$) : Var$ = "s_test$": gosub Affiche Var = adr(s_val$) : Var$ = "s_val$" : gosub Affiche print " Fonction exécutée: Resultat = dll_call2 ("+chr$(34)+"Spoke"+chr$(34)+", adr(s_test$), adr(s_val$))" Resultat = dll_call2( "Spoke",adr(s_test$),adr(s_val$) ) print " Après l'appel de la fonction: " Var = adr(s_test$) : Var$ = "s_test$": gosub Affiche
' Affiche le boutton pour la suite et l'active button 999 : left 999,15 : top 999 ,height(0)-55 : width 999,width(0)-55 : height 999,15 caption 999,"Suite" : on_click 999 , Suite1 end Suite1:
2D_Clear: off_click 999 print " ----- test instr avec start% = position de depart------" ' s_test$ = string$(100," ") : ' init avec espaces SI besoin , la dll s_test$ = "azertyuiopqsdfg" : ' ne pouvant pas rallonger la chaine start% = 3 : ' recherche à partir du caractere n° 3 s_val$ = "yu" Resultat = dll_call3( "InStrs",start% ,adr(s_test$) ,adr(s_val$) ) print "pos/string1 = " + str$(Resultat) : ' c'est le retour print "" print " --- test instr avec start% = position de depart + Any ----" ' ' + Any = le premier caractere trouvé parmi ceux de s_val$ s_test$ = "des bons caracteres" start% = 1 : ' recherche à partir du caractere n° 1 s_val$ = "nopqrstuvwxyz0123456789" Resultat = dll_call3( "InStrsAny",start% ,adr(s_test$) ,adr(s_val$) ) print "pos/string2 = " + str$(Resultat) : ' c'est le retour R_InStrsAny% print "" print " ------test remplacement chaine dans une chaine-----" ' rem s_test$ = string$(100," ") : ' init avec espaces SI besoin , la dll ne peut pas rallonger la chaine s_test$ = "des bons caracteres" : ' cette chaine peut etre allongee print " s_test$ = " + s_test$ s_val$ = "mauvais" : where% = 5 : len% = 7 : ' where = à partir d'ou ; len = combien de caracteres remplacer Resultat = dll_call4( "Overwrite",adr(s_test$) ,where% ,len% ,adr(s_val$) ) print " overwrite = " + s_test$ : ' on voit que Overwrite n'est pas = à concatenation print "" print " ------ test conversion decimal - hexadecimal-----" i_test% = 1000 s_test$ = " " : ' init avec espaces print " en Decimal = " + str$(i_test%) len% = 8 : ' nb de chiffres affiches au retour Resultat = dll_call3( "Hex",i_test% ,len% ,adr(s_test$) ) print " en Hexa = " + s_test$ : ' c'est le retour print "" print " ---- test conversion decimal / integer arrondi , fonction Fix-----" ' ' ex -1.3 -> Int donne -2 , Fix donne -1 ; ex 4.9 -> Int donne 4 ,Fix donne 4 F_test = -1.3: Resultat = dll_call1( "Fixf",adr(F_test) ) print " int de -1.3 = " + str$(int(F_test)) + " : Fix de -1.3 = " + str$(Resultat)
F_test = 4.9 : Resultat = dll_call1( "Fixf",adr(F_test) ) print " int de 4.9 = " + str$(int(F_test)) + " : Fix de 4.9 = " + str$(Resultat) print "" print " ---- test conversion integer / binaire , retour dans une chaine----" ' S_Val$ = "0000000000000000" : ' init a 16 bits i_test% = 1280 : print " i_test% = " + str$(i_test%) len% = 16 : ' Nb de digits a afficher Resultat = dll_call3( "IntToBin",i_test% ,len% ,adr(S_val$) ) print " conv int/bin = " + S_val$ print "" print " --test Shift Left d'un Integer avec decalage des bits de 3 vers la gauche--" ' i_test% = 5 : shft% = 3 print " 5 = 0101 en binaire ,3 decalages => 5 * 2^3 = 40 " Resultat = dll_call2( "ShLeft",adr(i_test%), adr(shft%) ) print " R_ShLeft% = " + str$(Resultat) print "" print " --- test Shift Right d'un Integer avec decalage des bits de 3 vers la droite---" ' i_test% = 40 : shft% = 3 print " 40 = 101000 en binaire ,3 decalages => 40 / 2^3 = 5 " Resultat = dll_call2( "ShRight",adr(i_test%), adr(shft%) ) print " R_ShRight% = " + str$(Resultat) caption 999,"Quitter" : on_click 999 , Quit end ' REM --------- procedures ----------------------------------------- Affiche: Result$ = string$(20," "): Temp = dll_call3( "Hex",Var ,8 ,adr(AdresseMemoire$)) AdresseMemoire$= left$(AdresseMemoire$,4) + ":" + left$(right$(AdresseMemoire$,5),4) If right$(Var$, 1) = "%" Result$ = str$(dll_call1( "Ipeek",Var ) ) Else if right$(Var$, 1) = "$" Temp = dll_call2( "Speek", Var, adr(Result$) ) Result$ = chr$(34) + Result$ + chr$(34) else Temp = dll_call2( "Fpeek", Var, adr(Var_temp)) Result$ = str$(Var_temp) end_if End_If print " "+ Left$(Var$+string$(10," "),10) + " = " + Left$(Result$ +string$(22," "),22) + " (Adresse mémoire = " + AdresseMemoire$ +" )" AdresseMemoire$ = "000000000" return Quit: dll_off terminate return | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 10:36 | |
| - enform a écrit:
-
Les traitements FFT me plaisent toujours , mon coté electronique ( moyen... ). test_fft utilise-t-il des routines exterieures ? ne m'étant pas encore arraché les cheveux à décortiquer les codes.
Le code pour la Dll : http://www.file-pasta.com/s/1961/fun_fb.zip
Merci pour le code. Je viens de le télécharger Le code FFT de FBMath n'utilise pas de routines extérieures. Son intérêt est surtout pédagogique. Il est basé sur un ancien article de Don Cross dont j'ai fait la traduction ici : http://www.unilim.fr/pages_perso/jean.debord/math/fourier/fourier.htm | |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 12:46 | |
| La FFT , il faut que je fasse des essais !
Jicehel , tu as été piqué par une guepe pour écrire aussi vite !
Il faudra peut-etre choisir des noms de variables plus universels que : i_test% , F_test , etc ,
pour faciliter le ré-emploi .
Salut
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 13:39 | |
| Tu as raison pour le nom des variables, là, j'ai laissé celles d'origines, pour la modif, faute de temps. L'idée c'était surtout de faire une source le plus simple possible avec l'explication de l'utilisation de la fonction de la DLL et comme on manipule des données, de faire un petit état (avant / après).
Le top serait sans doute de faire un peu de mise en forme pour mettre en valeur les mots clés, le noms de variable, les formules, ... On pourrait, par exemple faire une "form" avec les fonctions dispo et un bouton tester pour chaque qui afficherait l'explication de la fonction et les états des varaibles avant - après.
J'ai essayé aussi de montrer l'une des utilité de poke et peek dans la fonction qui affiche les variables, mais il y a des tas d'usages. (L'écriture directe dans la mémoire vidéos était couramment utilisée à l'époque pour accélerer certains affichage de jeux sans utiliser l'assembleur ou le C, mais cela servait aussi beaucoup à la gestion des DATA).
Une petite remarque, ce serait bien de savoir sur combien d'octets travaillent les différentes fonctions peek ou poke de la DLL, comme on travaille très près du fonctionnement de la machine. | |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 8 Juin 2011 - 19:06 | |
| Pour l'aspect , oui , on peut enjoliver . Mon code sortait du four , et le tien aussi , alors on ne va pas se faire de reproches trop vite , non ? . Attendons les critiques ... La mise en forme d'origine peut etre interessante avec les gosub à la fin , ça ressemble le plus à une écriture avec des instructions natives : des parametres , et puis appel de la fonction ; on n'a pas Dll_call(.......) dans le code principal . Non ? On pourrait aussi placer les gosub dans un Include , on ne les verrait meme plus . Peek et Poke -> Integer = 4 octets ; Reel = 8 octets D'autres idées de fonctions ? Faisables ... Et d'utilisation aussi . ( c'est ancien ,Peek et Poke sont dans un bateau) ; et pour la gestion des Data , c'était comment ? Amélioration de Restore ? Bon , pour l' instant tchao | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Dim 12 Juin 2011 - 23:44 | |
| J'ai commencé le programme de test de ta DLL "formaté" Il est compose de 2 parties: La partie 1: un fichier "def_fonctions.ini" (Pour les tests, je n'ai rempli que les 3 premières fonctions) - Code:
-
fun_fb.dll Ipeek;peek nombre integer;2;Ipeek permet de lire en mémoire la valeur d'un objet de type entier;La valeur de la variable passée en argument sera stockée dans Resultat;1;i_test%;1000;Resultat = dll_call1( "Ipeek",adr(i_test%) ) Fpeek;peek nombre flottant;2;Fpeek permet de lire en mémoire la valeur d'un objet de type réel;La valeur de la variable 1 passée en argument sera stockée dans la variable 2;2;f_test;123.456;f_val;0;Resultat = dll_call2( "Fpeek",adr(f_test),adr(f_val) ) Speek;peek string;4;Speek permet de lire le contenu de s_test$ en mémoire et de le stocker dans s_val$;Attention,il faut réserver assez de place pour s_val$ (plus que la taille max de s_test$);Pour connaitre la taille de la chaine reçue, chercher le 0 final.;Penser à ce 0 pour la taille de la chaine de réception;2;s_test$;"abcdef";s_val$;string$(20," ");Resultat = dll_call2( "Speek",adr(s_test$),adr(s_val$) ) La seconde partie est le programme Panoramic qui vient rechercher les infos (Actuellement, pas d'execution, il faut que je voit comment faire, je me creuse les méninges pour le moment ... Je suis sûr que c'est tout bête, mais si vous voyez, n'hésitez pas ... ^^) Mis à jour à l'aide du reformateur de JL35 (voir post suivant ....)
Dernière édition par Jicehel le Mar 14 Juin 2011 - 1:17, édité 2 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Lun 13 Juin 2011 - 0:14 | |
| Message obsolète, voir source du post suivant | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 1:28 | |
| Et voilà, le code fonctionne, plus qu'à rejouter les fonctions de la DLL dans le fichier ini et ça marche. Après on pourra éventuellement pofiner en rendant les valeurs des variables éditable par exemple ou en gérant les erreurs, ... - Code:
-
' ======================================================================================================== ' Le code ci_dessus est une exemple permettant de comprendre l'utilisation de fun_fb.dll ' Les procedures ainsi que le code de base des fonctions de la Dll est globalement ecrit ' automatiquement à l'aide de Speedo (wizzard d'interfaçage avec FreeBasic). ' Le code a été ensuite modifié pour faciliter la compréhension de l'exemple ' ========================================================================================================
DIM Temp, Var, Var_temp, Max_X , Max_Y , Compteur_fonctions%, Resultat$, Nom_DLL$ DIM Var$, Var_temp$, Fichier_ini$, Fichier_principal$, Fichier_cree$, MessageDeFin$
LABEL Quit, Click_fonction, Touche_sur_fonction, Lance
REM Gestion des répertoires et des fichiers DIR_CHANGE "C:\Program Files\Panoramic Editor V 0.9.20\sources\Fun_fb" Fichier_ini$ = "def_fonctions.ini" Fichier_principal$ = "fun_p_v1_4.bas" Fichier_cree$ = "fonction.bas"
REM Définition des constantes Max_X = 750 : Max_Y = 580 MessageDeFin$ = "Vous nous quittez."+CHR$(13)+CHR$(10)+"Au revoir" HEIGHT 0 , Max_Y : WIDTH 0 , Max_X : CAPTION 0,"Test des fonctions d'une DLL"
ALPHA 4 : LEFT 4,10 : TOP 4,10 : WIDTH 4, Max_X: HEIGHT 4, 20: FONT_NAME 4,"Tahoma":FONT_SIZE 4,16
REM Liste des images (affiche l'image si on clique dessus, le test des touches se fait dans code LIST 1 : LEFT 1,10 : TOP 1,50 : WIDTH 1,100 : HEIGHT 1,(Max_Y - 90) : ON_CLICK 1,Click_fonction: ON_KEY_DOWN 1,Touche_sur_fonction LIST 3 : LEFT 3,90 : TOP 3,50 : WIDTH 3,220 : HEIGHT 3,(Max_Y - 90) : INACTIVE 3
CONTAINER 5 : LEFT 5,330 : TOP 5,45 : WIDTH 5,400 : HEIGHT 5,30 : INACTIVE 5 ALPHA 6 : PARENT 6,5: LEFT 6,10 : TOP 6,7 : WIDTH 6,380 : HEIGHT 6, 15 : FONT_BOLD 6 : FONT_NAME 6,"Tahoma":FONT_SIZE 6,12 : CAPTION 6,"Nom fonction"
CONTAINER 7 : LEFT 7,330 : TOP 7,75 : WIDTH 7,400 : HEIGHT 7,80 : INACTIVE 7 ALPHA 13 : PARENT 13,7 : LEFT 13,10 : TOP 13,13 : WIDTH 13,380 : HEIGHT 13, 10 : FONT_SIZE 13,9 : CAPTION 13,"Commentaire ligne 1" ALPHA 14 : PARENT 14,7 : LEFT 14,10 : TOP 14,28 : WIDTH 14,380 : HEIGHT 14, 10 : FONT_SIZE 14,9 : CAPTION 14,"Commentaire ligne 2" ALPHA 15 : PARENT 15,7 : LEFT 15,10 : TOP 15,43 : WIDTH 15,380 : HEIGHT 15, 10 : FONT_SIZE 15,9 : CAPTION 15,"Commentaire ligne 3" ALPHA 16 : PARENT 16,7 : LEFT 16,10 : TOP 16,58 : WIDTH 16,380 : HEIGHT 16, 10 : FONT_SIZE 16,9 : CAPTION 16,"Commentaire ligne 4"
CONTAINER 8 : LEFT 8,330 : TOP 8,155 : WIDTH 8,400 : HEIGHT 8,80 : INACTIVE 8 ALPHA 9 : PARENT 9,8 : LEFT 9,10 : TOP 9,8 : WIDTH 9,380 : HEIGHT 9, 12 : FONT_BOLD 9 : FONT_NAME 9,"Tahoma":FONT_SIZE 9,9 : CAPTION 9,"Avant fonction" ALPHA 10 : PARENT 10,8 : LEFT 10,10 : TOP 10,27 : WIDTH 10,100 : HEIGHT 10, 10 : FONT_SIZE 10,9 : CAPTION 10,"Variable 1" ALPHA 11 : PARENT 11,8 : LEFT 11,10 : TOP 11,42 : WIDTH 11,100 : HEIGHT 11, 10 : FONT_SIZE 11,9 : CAPTION 11,"Variable 2" ALPHA 12 : PARENT 12,8 : LEFT 12,10 : TOP 12,57 : WIDTH 12,100 : HEIGHT 12, 10 : FONT_SIZE 12,9 : CAPTION 12,"Variable 3" ALPHA 20 : PARENT 20,8 : LEFT 20,120 : TOP 20,27 : WIDTH 20,270 : HEIGHT 20, 10 : FONT_COLOR 20,0,0,255 : FONT_SIZE 20,9 : CAPTION 20,"Val. Var. 1" ALPHA 21 : PARENT 21,8 : LEFT 21,120 : TOP 21,42 : WIDTH 21,270 : HEIGHT 21, 10 : FONT_COLOR 21,0,0,255 : FONT_SIZE 21,9 : CAPTION 21,"Val. Var. 2" ALPHA 22 : PARENT 22,8 : LEFT 22,120 : TOP 22,57 : WIDTH 22,270 : HEIGHT 22, 10 : FONT_COLOR 22,0,0,255 : FONT_SIZE 22,9 : CAPTION 22,"Val. Var. 3"
CONTAINER 17 : LEFT 17,330 : TOP 17,235 : WIDTH 17, 400 : HEIGHT 17, 50: INACTIVE 17 ALPHA 19 : PARENT 19,17 : LEFT 19,10 : TOP 19,8 : WIDTH 19,380 : HEIGHT 19, 12 : FONT_BOLD 19 : FONT_NAME 19,"Tahoma":FONT_SIZE 19,9 : CAPTION 19,"EXECUTE cette fonction" ALPHA 18 : PARENT 18,17 : LEFT 18,10 : TOP 18,27 : WIDTH 18,380 : HEIGHT 18, 10 : FONT_COLOR 18,0,0,255 : FONT_SIZE 18,9 : CAPTION 18,"Resultat = DLL_Call3( Fonction Appelée , Variable 1 , Variable 2 , Variable 3 )"
DLIST 2
IF FILE_EXISTS(Fichier_ini$)=1 CLEAR 1 FILE_LOAD 2, Fichier_ini$ IF COUNT(2) > 1 var$ = ITEM_READ$(2,1) CAPTION 4, "Test des fonctions de "+ var$ FOR Compteur_fonctions%=2 TO COUNT(2) var$ = ITEM_READ$(2,Compteur_fonctions%) IF LEN(var$) > 20 Temp = INSTR(var$,";") IF Temp > 2 Temp = Temp - 1 ITEM_ADD 1, LEFT$(var$, Temp) Temp = Temp + 2 Var_Temp = INSTR(var$,";") IF Var_Temp > Temp Var = Var_Temp - Temp ITEM_ADD 3, MID$(var$, Temp, Var) END_IF END_IF END_IF NEXT Compteur_fonctions% ELSE MessageDeFin$ = "Le fichier ini n'est pas correct" GOSUB quit END_IF ELSE MessageDeFin$ = "Le fichier ini n'a pas pu être trouvé" GOSUB quit END_IF BUTTON 998 : HIDE 998 : LEFT 998,450 : TOP 998 ,(Max_Y - 65) : WIDTH 998,160 : HEIGHT 998,25 CAPTION 998,"Lancer la fonction" : ON_CLICK 998 , Lance BUTTON 999 : LEFT 999,330 : TOP 999 ,(Max_Y - 65) : WIDTH 999,80 : HEIGHT 999,25 CAPTION 999,"Quitter" : ON_CLICK 999 , Quit END
Click_fonction:
Rem Lit le nom de la fonction
Nom_DLL$ = ITEM_READ$(2,1) var$ = ITEM_READ$(2,ITEM_INDEX(1)+1) Temp = INSTR(var$,";") Temp = Temp - 1 CAPTION 6,LEFT$(var$, Temp) var$ = RIGHT$(var$,LEN(var$)-Temp-1)
FILE_OPEN_WRITE 25, Fichier_cree$ FILE_WRITELN 25, "REM Programme temporaire à chainer pour tester la DLL" FILE_WRITELN 25, "" FILE_WRITELN 25, "DIM Temp, Var, Var_temp, Max_X , Max_Y" FILE_WRITELN 25, "DIM Compteur_fonctions%" FILE_WRITELN 25, "DIM Var$, Fichier_principal$, MessageDeFin$, Result$" FILE_WRITELN 25, "" FILE_WRITELN 25, "LABEL Quit, MetAJourResultat, Retour" FILE_WRITELN 25, "" FILE_WRITELN 25, "REM Définition des constantes" FILE_WRITELN 25, "Max_X = 450 : Max_Y = 580" FILE_WRITELN 25, "Fichier_principal$=" + CHR$(34) + Fichier_principal$ + CHR$(34) FILE_WRITELN 25, "MessageDeFin$ = " + CHR$(34) + "Au revoir" + CHR$(34) FILE_WRITELN 25, "HEIGHT 0 , Max_Y : WIDTH 0 , Max_X : CAPTION 0," + CHR$(34) + "Test de la fonction : " + CAPTION$(6) + CHR$(34) FILE_WRITELN 25, "" FILE_WRITELN 25, "DLL_ON " + CHR$(34) + Nom_DLL$ + CHR$(34) FILE_WRITELN 25, "" FILE_WRITELN 25, "CONTAINER 5 : HIDE 5: LEFT 5,10 : TOP 5,45 : WIDTH 5,400 : HEIGHT 5,30 : INACTIVE 5" FILE_WRITELN 25, "ALPHA 6 : PARENT 6,5: LEFT 6,10 : TOP 6,7 : WIDTH 6,380 : HEIGHT 6, 15 : FONT_BOLD 6 : FONT_SIZE 6,12 : CAPTION 6," + CHR$(34) + "Nom fonction" + CHR$(34) FILE_WRITELN 25, "" FILE_WRITELN 25, "CONTAINER 7 : HIDE 7 : LEFT 7,10 : TOP 7,75 : WIDTH 7,400 : HEIGHT 7,80 : INACTIVE 7" FILE_WRITELN 25, "ALPHA 13 : PARENT 13,7 : LEFT 13,10 : TOP 13,13 : WIDTH 13,380 : HEIGHT 13, 10 : FONT_SIZE 13,9" FILE_WRITELN 25, "ALPHA 14 : PARENT 14,7 : LEFT 14,10 : TOP 14,28 : WIDTH 14,380 : HEIGHT 14, 10 : FONT_SIZE 14,9" FILE_WRITELN 25, "ALPHA 15 : PARENT 15,7 : LEFT 15,10 : TOP 15,43 : WIDTH 15,380 : HEIGHT 15, 10 : FONT_SIZE 15,9" FILE_WRITELN 25, "ALPHA 16 : PARENT 16,7 : LEFT 16,10 : TOP 16,58 : WIDTH 16,380 : HEIGHT 16, 10 : FONT_SIZE 16,9" FILE_WRITELN 25, "" FILE_WRITELN 25, "CONTAINER 8 : HIDE 8 : LEFT 8,10 : TOP 8,155 : WIDTH 8,400 : HEIGHT 8,80 : INACTIVE 8" FILE_WRITELN 25, "ALPHA 9 : PARENT 9,8 : LEFT 9,10 : TOP 9,8 : WIDTH 9,380 : HEIGHT 9, 12 : FONT_BOLD 9 : FONT_SIZE 9,9 : CAPTION 9," + CHR$(34) + "Avant fonction" + CHR$(34) FILE_WRITELN 25, "ALPHA 10 : PARENT 10,8 : LEFT 10,10 : TOP 10,27 : WIDTH 10,100 : HEIGHT 10, 10 : FONT_SIZE 10,9" FILE_WRITELN 25, "ALPHA 11 : PARENT 11,8 : LEFT 11,10 : TOP 11,42 : WIDTH 11,100 : HEIGHT 11, 10 : FONT_SIZE 11,9" FILE_WRITELN 25, "ALPHA 12 : PARENT 12,8 : LEFT 12,10 : TOP 12,57 : WIDTH 12,100 : HEIGHT 12, 10 : FONT_SIZE 12,9" FILE_WRITELN 25, "ALPHA 20 : PARENT 20,8 : LEFT 20,120 : TOP 20,27 : WIDTH 20,270 : HEIGHT 20, 10 : FONT_COLOR 20,0,0,255 : FONT_SIZE 20,9" FILE_WRITELN 25, "ALPHA 21 : PARENT 21,8 : LEFT 21,120 : TOP 21,42 : WIDTH 21,270 : HEIGHT 21, 10 : FONT_COLOR 21,0,0,255 : FONT_SIZE 21,9" FILE_WRITELN 25, "ALPHA 22 : PARENT 22,8 : LEFT 22,120 : TOP 22,57 : WIDTH 22,270 : HEIGHT 22, 10 : FONT_COLOR 22,0,0,255 : FONT_SIZE 22,9" FILE_WRITELN 25, "" FILE_WRITELN 25, "CONTAINER 17 : HIDE 17 : LEFT 17,10 : TOP 17,235 : WIDTH 17, 400 : HEIGHT 17, 50: INACTIVE 17" FILE_WRITELN 25, "ALPHA 19 : PARENT 19,17 : LEFT 19,10 : TOP 19,8 : WIDTH 19,380 : HEIGHT 19, 12 : FONT_BOLD 19 : FONT_SIZE 19,9 : CAPTION 19," + CHR$(34) + "EXECUTE cette fonction" + CHR$(34) FILE_WRITELN 25, "ALPHA 18 : PARENT 18,17 : LEFT 18,10 : TOP 18,27 : WIDTH 18,380 : HEIGHT 18, 10 : FONT_COLOR 18,0,0,255 : FONT_SIZE 18,9" FILE_WRITELN 25, "" FILE_WRITELN 25, "CONTAINER 28 : HIDE 28 : LEFT 28,10 : TOP 28,285 : WIDTH 28,400 : HEIGHT 28,95 : INACTIVE 28" FILE_WRITELN 25, "ALPHA 29 : PARENT 29,28 : LEFT 29,10 : TOP 29,8 : WIDTH 29,380 : HEIGHT 29, 12 : FONT_BOLD 29 : FONT_SIZE 29,9 : CAPTION 29," + CHR$(34) + "Après fonction" + CHR$(34) FILE_WRITELN 25, "ALPHA 30 : PARENT 30,28 : LEFT 30,10 : TOP 30,27 : WIDTH 30,100 : HEIGHT 30, 10 : FONT_SIZE 30,9" FILE_WRITELN 25, "ALPHA 31 : PARENT 31,28 : LEFT 31,10 : TOP 31,42 : WIDTH 31,100 : HEIGHT 31, 10 : FONT_SIZE 31,9" FILE_WRITELN 25, "ALPHA 32 : PARENT 32,28 : LEFT 32,10 : TOP 32,57 : WIDTH 32,100 : HEIGHT 32, 10 : FONT_SIZE 32,9" FILE_WRITELN 25, "ALPHA 23 : PARENT 23,28 : LEFT 23,10 : TOP 23,72 : WIDTH 23,100 : HEIGHT 23, 10 : FONT_SIZE 23,9" FILE_WRITELN 25, "ALPHA 40 : PARENT 40,28 : LEFT 40,120 : TOP 40,27 : WIDTH 40,270 : HEIGHT 40, 10 : FONT_COLOR 40,0,0,255 : FONT_SIZE 40,9" FILE_WRITELN 25, "ALPHA 41 : PARENT 41,28 : LEFT 41,120 : TOP 41,42 : WIDTH 41,270 : HEIGHT 41, 10 : FONT_COLOR 41,0,0,255 : FONT_SIZE 41,9" FILE_WRITELN 25, "ALPHA 42 : PARENT 42,28 : LEFT 42,120 : TOP 42,57 : WIDTH 42,270 : HEIGHT 42, 10 : FONT_COLOR 42,0,0,255 : FONT_SIZE 42,9" FILE_WRITELN 25, "ALPHA 24 : PARENT 24,28 : LEFT 24,120 : TOP 24,72 : WIDTH 24,270 : HEIGHT 24, 10 : FONT_COLOR 24,0,0,255 : FONT_SIZE 24,9" FILE_WRITELN 25, "" FILE_WRITELN 25, "BUTTON 998 : LEFT 998,120 : TOP 998 ,(Max_Y - 65) : WIDTH 998,160 : HEIGHT 998,25" FILE_WRITELN 25, "CAPTION 998," + CHR$(34) + "Retour à la selection" + CHR$(34) + " : ON_CLICK 998 , Retour" FILE_WRITELN 25, "BUTTON 999 : LEFT 999,20 : TOP 999 ,(Max_Y - 65) : WIDTH 999,80 : HEIGHT 999,25" FILE_WRITELN 25, "CAPTION 999," + CHR$(34) + "Quitter" + CHR$(34) + ": ON_CLICK 999 , Quit" FILE_WRITELN 25, "CAPTION 6,"+ CHR$(34) + CAPTION$(6) +CHR$(34) FILE_WRITELN 25, "SHOW 5 : SHOW 7 : SHOW 8 : SHOW 17 : SHOW 28"
Rem Lit la description courte (inutile pour ici) Temp = INSTR(var$, ";") Temp = Temp - 1 var$ = RIGHT$(var$,LEN(var$)-Temp-1)
Rem Lit le nombre de ligne de Commentaire de 1 à 4 puis les affiche CAPTION 13,"": CAPTION 14,"": CAPTION 15,"": CAPTION 16,"" FILE_WRITELN 25,"CAPTION 13," + CHR$(34) + CHR$(34) + ": CAPTION 14," + CHR$(34) + CHR$(34) + ": CAPTION 15," + CHR$(34) + CHR$(34) + ": CAPTION 16," + CHR$(34) + CHR$(34) Temp = INSTR(var$,";") Temp = Temp - 1 Var_Temp = VAL(LEFT$(var$, Temp)) var$ = RIGHT$(var$,LEN(var$)-Temp-1) FOR Compteur_fonctions%= 1 TO Var_Temp Temp = INSTR(var$,";") Temp = Temp - 1 CAPTION 12+Compteur_fonctions%,LEFT$(var$, Temp) FILE_WRITELN 25,"CAPTION "+ STR$(12 + Compteur_fonctions%) + "," + CHR$(34) + LEFT$(var$, Temp) + CHR$(34) var$ = RIGHT$(var$,LEN(var$)-Temp-1) NEXT Compteur_fonctions%
Rem Lit le nombre de variables de 1 à 3 puis les affiche CAPTION 10,"": CAPTION 11,"": CAPTION 12,"" CAPTION 20,"": CAPTION 21,"": CAPTION 22,"" FILE_WRITELN 25,"CAPTION 10," + CHR$(34) + CHR$(34) + ": CAPTION 11," + CHR$(34) + CHR$(34) + ": CAPTION 12," + CHR$(34) + CHR$(34) + ": CAPTION 30," + CHR$(34) + CHR$(34) FILE_WRITELN 25,"CAPTION 31," + CHR$(34) + CHR$(34) + ": CAPTION 32," + CHR$(34) + CHR$(34) + ": CAPTION 20," + CHR$(34) + CHR$(34) + ": CAPTION 21," + CHR$(34) + CHR$(34) + ": CAPTION 22," + CHR$(34) + CHR$(34) Temp = INSTR(var$,";") Temp = Temp - 1 Var_Temp = VAL(LEFT$(var$, Temp)) var$ = RIGHT$(var$,LEN(var$)-Temp-1) FOR Compteur_fonctions%= 1 TO Var_Temp Temp = INSTR(var$,";") Temp = Temp - 1 CAPTION 9+Compteur_fonctions%,LEFT$(var$, Temp) FILE_WRITELN 25,"CAPTION " + STR$(9+Compteur_fonctions%) + "," + CHR$(34) + LEFT$(var$, Temp) + CHR$(34) FILE_WRITELN 25,"CAPTION " + STR$(29+Compteur_fonctions%) + "," + CHR$(34) + LEFT$(var$, Temp) + CHR$(34) var$ = RIGHT$(var$,LEN(var$)-Temp-1) Temp = INSTR(var$,";") Temp = Temp - 1 CAPTION 19+Compteur_fonctions%, LEFT$(var$, Temp) IF RIGHT$(CAPTION$(9+Compteur_fonctions%),1) <> "$" FILE_WRITELN 25,"CAPTION " + STR$(19+Compteur_fonctions%) + "," + CHR$(34) + LEFT$(var$, Temp) + CHR$(34) ELSE FILE_WRITELN 25,"CAPTION " + STR$(19+Compteur_fonctions%) + "," + LEFT$(var$, Temp) END_IF var$ = RIGHT$(var$,LEN(var$)-Temp-1) NEXT Compteur_fonctions%
Rem Lit la fonction et l'affiche CAPTION 18,var$ Resultat$ = var$ Temp = INSTR(var$,CHR$(34)) var_temp$ = LEFT$(var$, temp) + " + CHR$(34) + " + CHR$(34) var$ = RIGHT$(var$, LEN(var$)-temp) Temp = INSTR(var$,CHR$(34)) var_temp$ = var_temp$ + LEFT$(var$, temp) + " + CHR$(34) + " + RIGHT$(var$, LEN(var$)-temp + 1)
FILE_WRITELN 25,"CAPTION 18," + CHR$(34) + var_temp$ + CHR$(34)
Rem Met à jour le nom de la variable qui recevra le résultat avec celle entrée dans la fonction Temp = INSTR(resultat$,"=") Temp = Temp-1 Resultat$ = LEFT$(resultat$, Temp) FILE_WRITELN 25,"CAPTION 23," + CHR$(34) + resultat$ + CHR$(34)
Rem Déclaration des variables Temp = 0 : var$ = "DIM " WHILE CAPTION$(10 + Temp) <> "" AND TEMP < 3 var$ = var$ + CAPTION$(10 + Temp) + " , " temp = temp + 1 END_WHILE var$ = var$ + Resultat$ FILE_WRITELN 25, var$
Temp = 0 WHILE CAPTION$(10 + Temp) <> "" AND TEMP < 3
IF RIGHT$(CAPTION$(10+Temp),1) = "$" FILE_WRITELN 25, CAPTION$(10 + Temp) + " = " + CHR$(34) + CAPTION$(20 + Temp) + CHR$(34) ELSE FILE_WRITELN 25, CAPTION$(10 + Temp) + " = " + CAPTION$(20 + Temp) END_IF Temp = Temp + 1 END_WHILE FILE_WRITELN 25, CAPTION$(18) Temp = 0 WHILE CAPTION$(10 + Temp) <> "" AND TEMP < 3 FILE_WRITELN 25, "Var$ = " + CHR$(34) + CAPTION$(10+Temp) + CHR$(34) + ": Var=ADR(" + CAPTION$(10 + Temp) + ")" FILE_WRITELN 25, "GOSUB MetAJourResultat" FILE_WRITELN 25, "CAPTION "+ STR$(40 + Temp) +" , LEFT$(Result$ +STRING$(22," + CHR$(34) + " "+ CHR$(34) +"),22)" temp = temp + 1 END_WHILE FILE_WRITELN 25, "Var$ = " + CHR$(34) + Resultat$ + CHR$(34) + ": Var=adr(" + Resultat$ + ")" FILE_WRITELN 25, "GOSUB MetAJourResultat" FILE_WRITELN 25, "CAPTION 24 , LEFT$(Result$ +STRING$(22," + CHR$(34) + " "+ CHR$(34) +"),22)" FILE_WRITELN 25, "END" FILE_WRITELN 25, "" FILE_WRITELN 25, "MetAJourResultat:" FILE_WRITELN 25, " Result$ = STRING$(20," + CHR$(34) + " " + CHR$(34) + ")" FILE_WRITELN 25, " IF RIGHT$(Var$, 1) = " + CHR$(34) + "%" + CHR$(34) FILE_WRITELN 25, " Result$ = STR$(DLL_CALL1( " + CHR$(34) +"Ipeek" + CHR$(34) + ",Var ) )" FILE_WRITELN 25, " ELSE" FILE_WRITELN 25, " IF RIGHT$(Var$, 1) = " + CHR$(34) + "$" + CHR$(34) FILE_WRITELN 25, " Temp = DLL_CALL2( " + CHR$(34) + "Speek" + CHR$(34) + ", Var, ADR(Result$) )" FILE_WRITELN 25, " Result$ = CHR$(34) + Result$ + CHR$(34)" FILE_WRITELN 25, " ELSE" FILE_WRITELN 25, " Temp = DLL_CALL2( " + CHR$(34) + "Fpeek" + CHR$(34) + ", Var, ADR(Var_temp))" FILE_WRITELN 25, " Result$ = STR$(Var_temp)" FILE_WRITELN 25, " END_IF" FILE_WRITELN 25, " END_IF" FILE_WRITELN 25, "RETURN" FILE_WRITELN 25, "" FILE_WRITELN 25, "Retour:" FILE_WRITELN 25, " CHAIN Fichier_principal$" FILE_WRITELN 25, "" FILE_WRITELN 25, "Quit:" FILE_WRITELN 25, " DLL_OFF" FILE_WRITELN 25, " Temp = MESSAGE_CONFIRMATION_OK(MessageDeFin$)" FILE_WRITELN 25, " TERMINATE" FILE_WRITELN 25, "RETURN" FILE_CLOSE 25
SHOW 998
RETURN
Lance: CHAIN Fichier_cree$
Touche_sur_fonction: RETURN
Quit: Temp = MESSAGE_CONFIRMATION_OK(MessageDeFin$) TERMINATE RETURN | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 12:54 | |
| Et voilà le code de def_fonctions.ini pour la dll fun_fb PS: Télécharger le programme dans le post just au dessus (MAJ ce midi car il y avait un méchant bug sur le traitement des chaines (J'ai du retirer la fonction overflow car elle a 4 arguments ... ce sera pour une prochaine version ) - Code:
-
fun_fb.dll Ipeek;peek nombre integer;2;Ipeek permet de lire en mémoire la valeur d'un objet de type entier;La valeur de la variable passée en argument sera stockée dans Resultat;1;i_test%;1000;Resultat = dll_call1( "Ipeek",adr(i_test%) ) Fpeek;peek nombre flottant;2;Fpeek permet de lire en mémoire la valeur d'un objet de type réel;La valeur de la variable 1 passée en argument sera stockée dans la variable 2;2;f_test;123.456;f_val;0;Resultat = dll_call2("Fpeek",adr(f_test),adr(f_val) ) Speek;peek string;4;Speek permet de lire le contenu de s_test$ en mémoire et de le stocker dans s_val$;Attention,il faut réserver assez de place pour s_val$ (plus que la taille max de s_test$);Pour connaitre la taille de la chaine reçue, chercher le 0 final.;Penser à ce 0 pour la taille de la chaine de réception;2;s_test$;"abcdef";s_val$;" ";Resultat = dll_call2( "Speek",adr(s_test$),adr(s_val$) ) Ipoke;Ipoke permet d'écrire un entier à un emplacement mémoire donné;1;Ipoke permet d'écrire un entier à un emplacement mémoire donné;2;i_test%;0;i_val%;100;Resultat = dll_call2( "Ipoke",adr(i_test%), i_val% ) Fpoke;Fpoke permet d'écrire un réel à un emplacement mémoire donné;1;Fpoke permet d'écrire un réel à un emplacement mémoire donné;2;f_test;0;f_val;222.22;Resultat = dll_call2( "Fpoke",adr(f_test) , adr(f_val) ) Spoke;Spoke permet d'écrire une chaine à un emplacement mémoire donné;1;Spoke permet d'écrire une chaine à un emplacement mémoire donné;2;s_test$;" ";s_val$;"ghijkl";Resultat = dll_call2("Spoke",adr(s_test$),adr(s_val$) ) InStrs;Emplacement depuisle début d'une chaine recherchée dans une autre chaine;4;Emplacement depuis le début d'une chaine recherchée dans une autre chaine;s_test$ est la chaine où l'on effectue la recherche et s_val$ est la chaine recherchée;start% est la position de départ de la recherche;L'emplacement de la chaine sera retourné dans Resultat (0 si non trouvée);3;s_test$;"azertyuiopqsdfg";s_val$;"yu";start%;3;Resultat = dll_call3( "InStrs",start%,adr(s_test$) ,adr(s_val$) ) InStrsAny;Recherche n'importe quel caractère d'une chaine dans une autre;4;Recherche n'importe quel caractère d'une chaine dans une autre;s_test$ contient les caractères à rechercher;s_val$ la chaine où l'on fait la recherche;start% est la position de départ de la recherche;3;s_test$;"des bons caracteres";s_val$;"nopqrstuvwxyz0123456789";start%;1;Resultat = dll_call3( "InStrsAny",start% , adr(s_test$),adr(s_val$) ) Hex;Effectue une conversion décimale vers héxadécimal;4;Effectue une conversion décimale vers héxadécimal;i_test% est la valeur à convertir;s_test$ est la chaine qui sera retournée (initialiser avec chaine de longueur > len%);len% est la longeur de la chaine demandée en retour;3;i_test%;1000; s_test$;" ";len%;8;Resultat = dll_call3( Hex , i_test% , len% , adr(s_test$) ) Fixf;Retourne la valeur entière arrondie d'un réel;1;Retourne la valeur entière arrondie d'un réel;1;F_test;-1.3;Resultat = dll_call1( "Fixf",adr(F_test) ) IntToBin;conversion d'un entier en binaire (retourné sous forme de chaine);4;conversion d'un entier en binaire (retourné sous forme de chaine);i_test% contiend la valeur entière à convertir;S_Val$ contiendra la chaine binaire retournée;len% est la longueur attendue de la chaine retournée;3;i_test%;1280;S_Val$;"0000000000000000";len%;8;Resultat = dll_call3( "IntToBin", i_test% , len%,adr(S_val$) ) ShLeft;décalage vers la gauche des bits d'un entier;3;décalage vers la gauche des bits d'un entier;i_test% est la valeur dont les bits vont être décalés à gauche;shft% est le décalage à effectuer;2;i_test%;5;shft%;3;Resultat = dll_call2( "ShLeft",adr(i_test%), adr(shft%) ) ShRight;décalage vers la droite des bits d'un entier;3;décalage vers la droite des bits d'un entier;i_test% est la valeur dont les bits vont être décalés à droite;shft% est le décalage à effectuer;2;i_test%;40;shft%;3;Resultat = dll_call2( "ShRight",adr(i_test%), adr(shft%) )
| |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 18:10 | |
| Tu as une ame de professeur... et pour les horaires de travail , tu es payé double !
J 'ai remis mon path , lancé et planté 'interpreteur... Y a t'il d'autres réglages ?
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 19:47 | |
| En principe non. Tu avais peut-être un truc d'ouvert, non ? Tu peux réessayer et me dire quel message d'erreur tu as ? Je refais un test avec les fichiers mis des fois qu'il y ait un problème de copier / coller | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 21:18 | |
| Je n'ai pas eu de problème en faisant un copier / coller. Il faut que tu es la DLL dans le répertoire que tu indiques dans la ligne "Dir_change", le fichier def_fonctions.ini avec la définition des fonctions et fun_p_v1_4.bas avec le code Panoramic. Après, le se débrouille pour créer fonction.bas tout seul. Tu peux aussi changer les noms des programmes en les modifiant les lignes en dessous.
Juste pour info, si d'autres ont testé, ça marche chez vous ou c'est moi qui ais de la chance ?
| |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 21:34 | |
| Finalement , apres un bon diner , et redemarrage ... "Vous nous quittez , Au revoir " nous salue quand on Quitte . Tu as fait un gros boulot! J'ai réduit la fonte de Alpha 4 , mais pas tout essayé . Merci pour ta participation .
| |
| | | enform
Nombre de messages : 42 Date d'inscription : 18/05/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mar 14 Juin 2011 - 21:49 | |
| Jicehel , je me permets de copier ici des explications que tu as posté ailleurs , ça peut servir :
' Le programme principal lit les définitions des fonctions dans un fichier ini. Quand l'utilisateur clique sur une fonction, ça écrit le programme de test de la fonction Quand l'utilisateur clique pour exécuter, on chaine le programme principal avec le programme créé. Le programme s'exécute et un bouton en bas permet le retour à la sélection de fonction en chainant alors sur le programme d'origine. C'est simple mais le but est surtout d'avoir un outil qui permette de tester les DLL qui manipulent les données. Plus tard, il faut que je monte le nombre de variables pouvant être suivies à 6. Que je rende modifiables les valeurs par défaut avant exécution de la fonction ou/et durant l'exécution de la fonction (pendant => recalcule le résultat) avec un controle de validité des valeurs (entier ... contient que des car de 0 à 9, entier => caractère 0 à 9 avec au max un ., pas de controle sur les chaines) '
Fin de citation . A + | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Mer 15 Juin 2011 - 7:33 | |
| Nickel | |
| | | Contenu sponsorisé
| Sujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ... | |
| |
| | | | Des fonctions en Dll . Peek , poke , bin , fix ,shift ... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |