FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Pedro Hier à 10:37

» Un autre pense-bête...
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -38%
Ecran PC gaming 23,8″ – ACER KG241Y P3bip ...
Voir le deal
99.99 €

 

 Des fonctions en Dll . Peek , poke , bin , fix ,shift ...

Aller en bas 
3 participants
AuteurMessage
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyLun 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 +
Revenir en haut Aller en bas
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 7 Juin 2011 - 15:24

Beau travail ! Peut-on avoir les sources de la DLL ?

Quelques fonctions de chaînes de caractères issues de ma bibliothèque FBMath :
http://fbmath.svn.sourceforge.net/viewvc/fbmath/modules/strings/
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 8 Juin 2011 - 0:11

Super, des nouvelles fonctions, de nouvelles possibilités Smile

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
Revenir en haut Aller en bas
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 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 Smile

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

Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 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.
Revenir en haut Aller en bas
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 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 ? Smile . 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyDim 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyLun 13 Juin 2011 - 0:14

Message obsolète, voir source du post suivant
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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 Embarassed (J'ai du retirer la fonction overflow car elle a 4 arguments ... ce sera pour une prochaine version Smile )
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%) )
Revenir en haut Aller en bas
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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 ?
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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 ?
Revenir en haut Aller en bas
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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 .
Revenir en haut Aller en bas
enform




Nombre de messages : 42
Date d'inscription : 18/05/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMar 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 +
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... EmptyMer 15 Juin 2011 - 7:33

Nickel Smile
Revenir en haut Aller en bas
Contenu sponsorisé





Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty
MessageSujet: Re: Des fonctions en Dll . Peek , poke , bin , fix ,shift ...   Des fonctions en Dll . Peek , poke , bin , fix ,shift ... Empty

Revenir en haut Aller en bas
 
Des fonctions en Dll . Peek , poke , bin , fix ,shift ...
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» PEEK et POKE
» Extension de PEEK et POKE

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: