Import lib ou OpenLibrary

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Merci CHAOS de tes eclaircissements 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Bon j'ai eu confirmation par SROD que les procedure n'etaient chargées que lorsque elles sont appellées.
C'est le compilo qui voit, mais en general c'est comme ça

Pour le retour string, il m'a donné la soluce aussi.
Ma methode n'est pas la bonne, car risquée

Alors j'en profite pour la ramener ici ...on sait jamais si ça peut servir a "quinquin" :mrgreen:

Dll :

Code : Tout sélectionner

#ExampleStringToReturn$ = "Kwai you idiot!"

ProcedureDLL.i GetString(*buffer)
  If *buffer
    PokeS(*buffer, #ExampleStringToReturn$)
  EndIf
  ProcedureReturn Len(#ExampleStringToReturn$)
EndProcedure
Client :

Code : Tout sélectionner

Import "GetString.lib"
  GetString(a.i=0) As "_GetString@4"
EndImport

;Get the required buffers size.
  numCharacters = GetString()

;Retrieve the string.
  a$ = Space(numCharacters)
  GetString(@a$)
  Debug a$
Vala vala :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Import lib ou OpenLibrary

Message par Fred »

Les strings sont propres à PureBasic, alors qu'une DLL est faite pour etre utilisée par n'importe quel langage. Donc le PeekS() est nécessaire.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Fred a écrit :Les strings sont propres à PureBasic, alors qu'une DLL est faite pour etre utilisée par n'importe quel langage. Donc le PeekS() est nécessaire.
Oula oulala !!!!
Que veut tu dire par la ???? :roll:

Tu veux dire que mon premier code est bon ????
Car SROD m'a dit qu'il etait dangereux :(

Code : Tout sélectionner

Import "Dll.lib"
MaFonctionDansLaDll(a.s)
EndImport

Procedure.s MaFonctionDansExe(Phrase.s)
ProcedureReturn PeekS(MaFonctionDansLaDll(Phrase))
EndProcedure

Debug MaFonctionDansExe("Bonjour Kcc")
Parce que si il est bon , pour tout dire ça m'arrange....parce que encore une fois faut que je modifie mes 100 fonctions pour passer par des buffers :?
Alors si PEEKS y'a bon pour toi ....y'a bon pour moi aussi :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Import lib ou OpenLibrary

Message par Fred »

En principe c'est bon. Ca merite un test quand meme ;)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Import lib ou OpenLibrary

Message par Progi1984 »

Par test,je pense que Frederic pense à ca :

Code : Tout sélectionner

Import "Dll.lib"
MaFonctionDansLaDll(a.s)
EndImport

Procedure.s MaFonctionDansExe(Phrase.s)
	*Mem = MaFonctionDansLaDll(Phrase)
	If *Mem
		ProcedureReturn PeekS(*Mem)
	else
		ProcedureReturn ""
	endif
EndProcedure

Debug MaFonctionDansExe("Bonjour Kcc")
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Alors la FRED.....je sais que tu le sais deja...mais...
JE T'AIME !!!Image

T'inquiete pas le test, ça fait un paillon que je le fait :D
J'ai tout fait comme ça :mrgreen:

Dans la DLL

Code : Tout sélectionner

ProcedureDLL KccYProgramme()
 Static a$ 
 ..
 ..
 ProcedureReturn @a$
EndProcedure
Dans l'EXE

Code : Tout sélectionner

Debug PEEKS(CallFunction(0, "KccYProgramme"))
Alors quand mon MAITRE y m'a dit que j'avais tout faux :
Yes providing the dll returns a global or static string. This is not a threadsafe way of doing it though. Use buffers to be absolutely safe.
http://www.purebasic.fr/english/viewtop ... 62#p304862

Il m'a fait une chose que je suis jamais arrivé a faire .......perdre 10 Kilos 8O
J'me suiis dit :
"Aille aille aille" et moi qui est tout codé comme ça :cry:

Bah moi je voyais pas ou c'etait dangereux, seulement si evidement la DLL repond, autrement c'est comme a canne ....le tapis rouge :D
Mais autrement ça marchait nickel :roll:

KCC il en a marre...
Il demande toujours avant, avec un petit exemple simple
Quand il a une reponse, il fait comme on lui a dit, mais il repercute ça sur des centaines de fonctions
Donc, il code des milliers de lignes et quand il a fini, un autre passe par la et lui dit que c'est pas comme ça qu'il faut faire, que c'est la mort de la memoire :cry:
Et KCC il veut pas faire souffrir les ordinateurs....il trouve que y'a bien assez de gens et d'animaux qui souffrent comme ça :cry:

D'ailleurs j'ai passé un mois sur juste un sujet
Comment passer un tableau de strings d'un EXE a une DLL
Un mois a faire des dizaines de codes et a me faire remonter les bretelles par SROD et me faire aider du forum français.
Car mois je passais un tableau comme une variable, et quand je liberais la copie du tableau dans l'exe, et ben je liberais les pointeurs de la DLL :oops:
Et ben a l'origine, c'etait "quinquin" du forum US qui m'avait dit de faire comme ça...
Et apres j'ai eu des dizaines de fonctions a corriger dans ma DLL
A force ma DLL elle est pleine de pansements :?

Mais bon, je lui en veux pas....il est tellement gentil avec moi, comme les gens de ce forum car il faut se le taper le KCC :mrgreen:
Donc comme dirait muriel robin..... "j'imprime" ta reponse qui m'arrange au plus haut point.

Et on dit rien a SROD....c'est notre secret :mrgreen:
Non je te dis ça ..parce que comme je sais que tu est bavard...... :lol:

Merci milles fois FRED

PS: Au fait....ça a aucun rapport....mais ma femme a le meme prenom que toi 8O
Ca fait que j'ai deux FRED dans ma vie :D
Dernière modification par Kwai chang caine le mer. 04/nov./2009 14:13, modifié 2 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Progi1984 a écrit :Par test,je pense que Frederic pense à ca :

Code : Tout sélectionner

Import "Dll.lib"
MaFonctionDansLaDll(a.s)
EndImport

Procedure.s MaFonctionDansExe(Phrase.s)
	*Mem = MaFonctionDansLaDll(Phrase)
	If *Mem
		ProcedureReturn PeekS(*Mem)
	else
		ProcedureReturn ""
	endif
EndProcedure

Debug MaFonctionDansExe("Bonjour Kcc")
Oui oui PROGI tu as raison
D'ailleur GNOZAL il arrette pas de tirer les oreilles a tout le monde en disant qu'il faut verifier la reponse de la DLL avant de faire PEEKS, car comme je l'ai dit au dessus...c'est le tapis rouge :(

Merci beaucoup de ton intervention PROGI 8)
Dernière modification par Kwai chang caine le mer. 04/nov./2009 14:12, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Putain j'suis une burne :oops:

Je viens juste de comprendre ce que FRED et PROGI veulent me dire

Ooohhh l'esquinté du godiwok !!!!
Deux MAITRES qui me disent la meme phrase et KCC il a pas compris....

Ayai !!!! faire le test......je viens de comprendre
Ca veux dire tester le retour de la DLL
Pas tester si PEEKS ça marche :lol: :lol: :lol:
Hihihi je me disait aussi....c'est dingue que FRED y me dise a moi de tester son PEEKS à lui hihihi !!!

Peut etre parce que si KCC y teste...et ben le monde entier il aura jamais de probleme :lol:

J'ai cru un instant que KCC, il allait prendre du galon, et etre le BETA testeur de la team :mrgreen:

Bon cette fois ......apres deux heures d'explication .....j'ai compris
Faut faire le test :mrgreen:

Et le plus drole dans tout ça.....c'est que je vous jure que je le fait pas expres :D

Hihihihi...faire le test...elle est bien bonne celle la ... :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre