Page 3 sur 4

Publié : mer. 20/juin/2007 18:02
par Kwai chang caine
Alors que ça t'arrive à toi ça m'effondre 8O

Je suis pas au bout de la route, j'ai interet a prendre le bonheur pendant le chemin :wink:

Merci de me supporter FLYPE, parfois il doit mieux valoir se taper un prog compliqué qu'un boulet comme moi

Bonne soiree

Publié : mer. 20/juin/2007 18:45
par Flype
et oui même à moi (d'ailleurs j'ai rien d'exceptionnel). la difficulté d'un programme est sans aucun doute proportionnelle au nombre de ligne qui le compose. ceci dit en moins de 10/20 lignes certains algorithmes, certaines formules (par ex une clef d'encodage, une requête SQL de ouf, un bug mystérieux, un bout de code dans un nouveau langage, etc...)

le plus fort, je trouve, c'est quand on bloque grave sur un sujet, qu'on voit les heures défiler, qu'on se dit 'bon bein je vais me coucher' à 3h du mat', désespéré :cry:

et que PAF d'un coup, en pleine nuit, on se réveille en se disant 'P*tain, je l'ai !' qu'on se lève trop impatient et que çà marche 8) mais bon souvent çà marche pas, on se recouche en se disant çà ira mieux demain :D ya toujours une solution (plus ou moins naze).

Publié : mer. 20/juin/2007 19:30
par Flype
autre exemple qui utilise une particularité mal connue de purebasic :

il est possible de dire à un tableau qu'il doit lire ses données à une adresse qu'on lui donne. je dois pas être clair là :roll:

un bon vieux example :P
la fonction 'GetEnv()' dans la dll renvoie la liste de toutes les variables d'environnement.

CODE DE LA DLL :

Code : Tout sélectionner

ProcedureDLL.l GetEnv(*n.Long) 
  
  Static Dim env.s(100)
  
  If ExamineEnvironmentVariables()
    
    *n\l = 0
    
    While (*n\l < 100) And NextEnvironmentVariable()
      env(*n\l) = EnvironmentVariableName() + " = " + EnvironmentVariableValue()
      *n\l + 1
    Wend
    
    ProcedureReturn @env()
    
  EndIf
  
EndProcedure
CODE TEST :

Code : Tout sélectionner

If OpenLibrary(0, "env.dll")
  
  *env = CallFunction(0, "GetEnv", @n)
  
  If *env 
    
    Dim env.s(n) 
    
    env() = *env
    
    For i = 0 To n - 1
      Debug env(i)
    Next
    
  EndIf
  
EndIf
CODE TEST 2 (autre méthode) :

Code : Tout sélectionner

Structure TABLE
  s.s[0]
EndStructure

If OpenLibrary(0, "env.dll")
  
  *env.TABLE = CallFunction(0, "GetEnv", @n)
  
  If *env
    
    For i = 0 To n - 1
      
      Debug *env\s[i]
      
    Next
    
  EndIf
  
  CloseLibrary(0)
  
EndIf

Publié : mer. 20/juin/2007 21:39
par Kwai chang caine
NADINEBOMBEC !!!!
Mais t'es pas un programmeur, tu m'a menti, j'ai trouvé ta vraie profession

T'es un magicien :D

Mais d'ou tu sort tous ces codes magiques, t'as un chapeau :D
Y m'épate, Y m'épate, Y m'épate comme dirait "fufu"

Je comprend pourquoi les PC font presque tout ce que tu leur commande, vu comment tu leur parle.

Moi meme quand je reste poli avec eux, je prend une baffe :lol:
ça me rappelle les femmes d'ailleur :roll:

Dis voir, j'avais oublié de te demander comment ça se fait que l'extension soit ".lib" alors que c'est une DLL 8O , ça m'a surpris ça (evidemment y'a pas que ça, mais ça plus que le reste)

Code : Tout sélectionner

Import "test.lib" 
  MesPhrases.l(*n) 
  MesPhotos.l(n.l) 
EndImport 
Je ne me fatiguerais jamais de te remercier 8)

Publié : mer. 20/juin/2007 21:55
par Flype
lol, tu me fais beaucoup rire à chaque fois.

pour le .lib :

depuis la v4, purebasic génère un fichier .lib en plus du fichier .dll lorsqu'on compile une dll. va voir dans ton dossier de test, normalement il y est.

ce fichier .lib est bien pratique car il permet d'ouvrir une dll plus proprement je trouve qu'avec OpenLibrary/CallFunction, car il est plus facile de déclarer/utiliser les fonctions de la dll de cette façon. on s'appele ce .lib un fichier de définition. Si tu ouvre ce fichier avec notepad tu pourra y voir le nom des fonctions, leurs arguments, et des bricoles, pas de code dedans en tout cas. bref, c'est fait pour être utilisé avec Import/EndImport et c'est super...

Publié : mer. 20/juin/2007 22:03
par Kwai chang caine
J'suis content de te faire rire :D

Au moins ça fait un echange, car je sais pas quoi t'apporter en echange de tout ton savoir et ta gentillesse et patience. :D

Ayaiii!!! le deal est fait

Toi tu m'apprend noir de belle chose, tu es un peu mon roi, et moi tout naturellement je postule pour le role du bouffon, gling gling
Au fait gling c'est le bruit des clochettes, dommage y'a pas le son dans les forums :lol:

En tout cas j'suis fier d'etre le bouffon du bon roi Phillipe :D

Cool le coup de la lib, evidement est-ce la peine de te dire que je connaissais pas :roll:

Magicien, j'te dis magicien :D

Publié : mer. 20/juin/2007 22:15
par Flype
hehe, j'ai trouvé nos avatars alors :

Image et Image

Publié : mer. 20/juin/2007 22:19
par Kwai chang caine
:lol: :lol: :lol:

Ah bah la pour le coup c'est toi qui m'a fait rire :lol: :lol:

Publié : mer. 20/juin/2007 22:20
par Kwai chang caine
Aaaahh oouuuaaaihhhh

Je me suis reconnu, j'suis a droite, y'a mes clochettes :lol:

Publié : jeu. 21/juin/2007 8:11
par Kwai chang caine
Cpl.Bator a écrit : ProcedureCDLL.l ReturnPtr()
ProcedureReturn Tab$()
EndProcedure[/code]
Dans le code de notre ami Cpl.bator quelques post au dessus, pourquoi utilise t'il "ProcedureCDLL" et pas "ProcedureDLL"

Publié : jeu. 21/juin/2007 9:24
par Backup
en tout cas ça marche aussi :D

(bon , je file moi !! :lol: )

Code : Tout sélectionner

; code de la dll
Global Dim tableau$(5)
For t=0 To 5
    tableau$(t)="phrase"+Str(t)
Next t  

ProcedureDLL RempliTablo()  
    ProcedureReturn tableau$()
EndProcedure 

Code : Tout sélectionner

; exploite la dll
Dim tablo.s(5)

If OpenLibrary(0, "dll_test.dll") 
    *AdresseTablo = CallFunction(0, "RempliTablo") ; recup l'adresse du tableau envoyé par la dll 
    For t=0 To 5
        *Ptr = PeekL(*AdresseTablo+(t*4)) ; recupere le contenu du tableau
    Debug  PeekS(*Ptr)  
Next t 
    CloseLibrary(0) 
EndIf 
Merci pour le truc, car je bloquais la dessus !! :? :D

Publié : jeu. 21/juin/2007 10:00
par Flype
Kwai chang caine a écrit :
Cpl.Bator a écrit : ProcedureCDLL.l ReturnPtr()
ProcedureReturn Tab$()
EndProcedure[/code]
Dans le code de notre ami Cpl.bator quelques post au dessus, pourquoi utilise t'il "ProcedureCDLL" et pas "ProcedureDLL"
à mon avis c'est une boulette. c'est bien ProcedureDLL qu'il faut...

ProcedureCDLL ne s'utilise jamais avec des DLL créées depuis purebasic.

Publié : jeu. 21/juin/2007 10:26
par Kwai chang caine
Merci de ta réponse rapide :wink:

Publié : jeu. 21/juin/2007 13:08
par Kwai chang caine
@FLYPE
Kwaï chang caïne wrote:
It's work's fine

It has a memory leak...

Qu'est ce qu'a voulu dire TROND, apparement vous aviez pas l'air tout a fait d'accord ?

http://www.purebasic.fr/english/viewtop ... 159#200159

Publié : jeu. 21/juin/2007 14:45
par Flype
ben le désaccord, c'est que moi je propose 'Static Dim' plutot qu'une variable (enfin un tableau) globale. mais bon c'est tout... il m'explique très brievement que Static = Global, mais bon c'est faux, ya quand meme un minimum de subtilité entre les deux.

pour la phrase 'It has a memory leak... '
il parlait du code de Psychophanta que je n'ai pas testé.

mes 2 propositions semblent fonctionner sans problème mais maintenant qq me dit que la proposition n°1 plante sous Win98 ME. alors j'attends une réaction de Fred... parceque je vois pas en quoi le programmeur serait responsable sur ce coup là. voir ici : http://www.purebasic.fr/english/viewtopic.php?t=27683

mais bon tu as raison j'ai demandé des explications plus claires...




quoiqu'il en soit amuses toi avec ma solution ou celle de cpl bator, sinon tu n'avancera pas beaucoup.