Page 1 sur 1

Simplifier fonction DLL avec retour string [Résolu]

Publié : mar. 10/juin/2008 9:21
par Kwai chang caine
Bonjour à tous

Je voudrais savoir si y'a pas moyen de faire plus simple, ou mieux evidemment :oops:

Code : Tout sélectionner

Procedure.s FonctionString(IdDll, Fonction$, Parametre1.s = "", Type1.s = "", Parametre2.s = "", Type2.s = "", Parametre3.s = "", Type3.s = "", Parametre4.s = "", Type4.s = "", Parametre5.s = "", Type5.s = "")
 
 zz.s = Space(1000)
 
 If Not Parametre1
 
  *zz = CallFunction(IdDll, Fonction$)
 
 ElseIf Parametre1
 
  Select Type1
  
   Case "s", ""
    *zz = CallFunction(IdDll, Fonction$, Parametre1)  
   Case "l"
    *zz = CallFunction(IdDll, Fonction$, Val(Parametre1)) 
    
  EndSelect
  
 ElseIf Parametre2
 
  Select Type2
  
   Case "s", ""
    *zz = CallFunction(IdDll, Fonction$, Parametre2)  
   Case "l"
    *zz = CallFunction(IdDll, Fonction$, Val(Parametre2)) 
    
  EndSelect
  
 ElseIf Parametre3
 
  Select Type3
  
   Case "s", ""
    *zz = CallFunction(IdDll, Fonction$, Parametre3)  
   Case "l"
    *zz = CallFunction(IdDll, Fonction$, Val(Parametre3)) 
    
  EndSelect
  
 ElseIf Parametre4
 
  Select Type4
  
   Case "s", ""
    *zz = CallFunction(IdDll, Fonction$, Parametre4)  
   Case "l"
    *zz = CallFunction(IdDll, Fonction$, Val(Parametre4)) 
    
  EndSelect
  
 ElseIf Parametre5
 
  Select Type5
  
   Case "s", ""
    *zz = CallFunction(IdDll, Fonction$, Parametre5)  
   Case "l"
    *zz = CallFunction(IdDll, Fonction$, Val(Parametre5)) 
    
  EndSelect
 
 EndIf
 
 ProcedureReturn PeekS(*zz)
 
EndProcedure
Merci et bonne journée

Publié : mar. 10/juin/2008 20:06
par Ollivier
Salut Kwaï,

Le but de la manoeuvre, c'est quoi en fait?

Publié : mer. 11/juin/2008 7:37
par Ollivier
Je crois que sur le site officiel, tu as une réponse adéquate!

Publié : mer. 11/juin/2008 8:27
par Kwai chang caine
Ok merci j'y vais de suite......
Je vais toujours sur le FR avant de voir le FR d'en face :wink:

Publié : mer. 11/juin/2008 8:46
par Kwai chang caine
Bon je ramene ce code sur le french forum, car je pense qu'il peut etre utile pour ceux qui aiment simplifier leurs codes et le rendre plus court.

Pour ceux qui n'aurait pas compris le but de la manoeuvre.
Cette fonction permet de la pas avoir a retaper tout le temps la gestion du pointeur memoire.
Une fonction qui permet donc d'avoir un retour string aussi simple qu'un integer avec une DLL :D
Car tout le monde sait qu'une DLL ne retourne pas de string directement, elle ne sait que retourner un nombre.
Dans ce nombre, on y met l'adresse de la variable string que l'on viens relire ensuite dans l'executable.

C'est l'equivalent de ça en fait:

Code : Tout sélectionner

Define a.s
a.s = Space(100)
*a =CallFunction(IdDll, Fonction$, Parametre) 
FonctionString = PeekS(*a)
Cette fonction fait donc ça 8)
ATTENTION, c'est du lourd, j'y est encore rien compris :oops:

Code : Tout sélectionner

; Code de EDDY

Macro CallFunctionRegex(dllID, Fonction, Param, numericRegexID) 
   If MatchRegularExpression(numericRegexID, Param) 
      *zz=CallFunction(dllID, Fonction, Val(Param)) 
   Else 
      *zz=CallFunction(dllID, Fonction, Param) 
   EndIf 
EndMacro 

Procedure.s FonctionString(IdDll, Fonction$, Parametre1.s="", Parametre2.s="") 
    
   zz.s=Space(1000) 
   numericRegexID=CreateRegularExpression(#PB_Any, "^([-+]{0,1}[\d]*)([.]{0,1}[\d]*)$") 
    
   If Not Parametre1       
      *zz=CallFunction(IdDll, Fonction$)       
   ElseIf Parametre1 
      CallFunctionRegex(IdDll, Fonction$, Parametre1, numericRegexID) 
   ElseIf Parametre2 
      CallFunctionRegex(IdDll, Fonction$, Parametre2, numericRegexID) 
   EndIf 
    
   FreeRegularExpression(numericRegexID) 
   ProcedureReturn PeekS(*zz) 
    
EndProcedure
Vous avouerez, que si vous appellez toutes les deux secondes une fonction string dans le meme code, ça vous fait drolement le menage une ligne pour 4.

Encore merci à EDDY pour son coup de main.
http://www.purebasic.fr/english/viewtop ... 372#247372

Merci à ceux qui m'ont lu et/ou tenté de m'aider.
Je vous souhaite une bonne journée

Publié : mer. 11/juin/2008 9:15
par brossden
Bonjour Mon Kcc d'amour !

Je ne sais pas si je dis une connerie mais à mon avis ta fonction merde un poil !

Pourquoi ?

Tu testes si le paramètre 1 existe

Si Oui tu retourne une valeur
Si Non une autre

Mais alors les autre lignes ne peuvent donc pas s'exécuter !!

Publié : mer. 11/juin/2008 9:51
par Kwai chang caine
Bonjour mon BROSSDEN adoré :D

Tu parle de ma fonction de biiiiip
Ou de celle de EDDY ???

Parce que celle de EDDY, j'essaie de comprendre, mais fooooouuuuyoouuyoouuu !! c'est pas du "toga" :?

Je suis alors allé essayé de comprendre l'exemple de FRED.
"J'mest dit" y'a moins de ligne, je vais comprendre .... :D
Pfffff! Fifre, j'y comprend :oops:

Code : Tout sélectionner

If CreateRegularExpression(0, "[a-z]b[a-z]")

  Dim Result$(0)
  
  a = ExtractRegularExpression(0, " abc it won't match abz", result$())
  
  MessageRequester("Info", "Nb strings found: "+Str(a))
  
  For k=0 To a-1
    MessageRequester("Info", Result$(k))
  Next

Else
  MessageRequester("Error", RegularExpressionError())
EndIf
Et bah pas mieux, c'est pas simple, remarque FREDO "y l'a dit" c'est pas pour les burnes comme moi :oops:
De fait, cette bibliothèque n'est pas pour les néophytes et il est conseillé d'avoir de solides bases en PureBasic et en programmation en général pour l'utiliser
Pis......, ch'est pas si t'as chouffer la ligne hieroghyphique 8O :

Code : Tout sélectionner

CreateRegularExpression(#PB_Any, "^([-+]{0,1}[\d]*)([.]{0,1}[\d]*)$") 

Publié : mer. 11/juin/2008 12:29
par brossden
Mon Kcc d'amour je parle de ta fonction !

Publié : mer. 11/juin/2008 13:17
par Kwai chang caine
Mais tu as raison mon sucre d'orge :D

Je n'avais meme pas vu, et je ne m'en etais meme pas rendu compte car je n'avais pas encore passé plus d'un parametre à la fonction.

Y'en a qu'un qui suis dans la classe :? Bravo :lol:
Quelle burne je fais, heureusement que le code de EDDY a l'air de marcher mieux que le miens :wink: