Page 1 sur 2
retourner une chaine$
Publié : dim. 18/avr./2010 21:37
par Le psychopathe
bonsoir
Comment retourner une chaine$ en sortie d'une procedure. Comme le procedurereturn, sachant que je souhaite faire une librairie (dll ), voir même en faire des fonction native pour pb après.

J'ai pensai à copier dans le press papier mais je trouve ça pas très pro.
Merci
Je viens de trouver un code qui peut etre la solution :
Code : Tout sélectionner
Procedure.s GetUserName()
Protected length.l = 255, result.s = Space(length)
If GetUserName_(@result, @length)
ProcedureReturn Left(result, length)
EndIf
EndProcedure
Procedure.s GetComputerName()
Protected length.l = 255, result.s = Space(length)
If GetComputerName_(@result, @length)
ProcedureReturn Left(result, length)
EndIf
EndProcedure
Debug GetUserName()
Debug GetComputerName()
Peut-on m'expliqer vite fait les @.
Re: retourner une chaine$
Publié : dim. 18/avr./2010 21:59
par Le Soldat Inconnu
@Machin.s renvoi l'adresse de Machin dans la mémoire.
En gros, si tu lis à cette adresse avec un PokeS(@Machin), ça te renvoi ton texte.
Re: retourner une chaine$
Publié : dim. 18/avr./2010 22:07
par Le psychopathe
oui mais là il y a pas d'allocatememory.
Donc dans mon cas je dois faire un allocate memory.
Ensuite mettre ma chaine en mémoire. Et retourner l'adresse de celle-ci avec procedure return.
Ensuite pareil, je ne comprends pas pourquoi : ProcedureReturn Left(result, length) fonctionne car il retourne une chaine et pas un numerique.
Re: retourner une chaine$
Publié : dim. 18/avr./2010 23:05
par Backup
...............
Re: retourner une chaine$
Publié : lun. 19/avr./2010 12:41
par Le psychopathe
Mdr
Cela fait plusieurs années que j'utilise les procédures et je n'avais jamais remarqué que l'on pouvait retourner une chaine.
Il me semble que dans la donc PB, c'est écris que ce n'est pas possible donc ...
Enfin bref, là je sus au taf. Je teste ce soir Dobro, Thx.
@Soldat inconnu : merci c'est un peu plus clair, même si un exemple sans api aurait été plus parlant dans mon cas car je n'ai pas reussi à me reservir des @.
thx
Re: retourner une chaine$
Publié : lun. 19/avr./2010 12:47
par Backup
................
Re: retourner une chaine$
Publié : lun. 19/avr./2010 13:11
par Le psychopathe
Lol je dis plus rien

J'ai fais une erreur :
Code : Tout sélectionner
ProcedureReturn ne peut pas être utilisé pour renvoyer un tableau, une liste chaînée ou une map.
Liste chaînée : je l'ai pris pour une chaîne. Enfin bref tant mieux pour moi ^^
Re: retourner une chaine$
Publié : lun. 19/avr./2010 13:34
par Backup

j'en etait sur !!
que tu ai confondu Chaine et liste chainée

Re: retourner une chaine$
Publié : lun. 19/avr./2010 14:14
par Geo Trouvpatou
Salut.
Sinon tu peux lire ce
post.
Et plus précisément mon tout dernier post.
Bye.
Re: retourner une chaine$
Publié : mar. 20/avr./2010 7:22
par Le psychopathe
Bonjour
@Dobro c'est bon, cela fonctionne.
@Geo Trouvpatou j'ai survolé ton post, c'est super. Je ferai ça à tête reposé car après le taf ... La preuve je vous écris du taf ^^
Re: retourner une chaine$
Publié : mar. 20/avr./2010 19:46
par Ollivier
Salut,
A la volée, il y a aussi
ceci qui peut être intéressant, pour les threads et autres. Et puis pour perdre son temps avec des chaînes compatibles µsoft, il y a
cela aussi... Mais là, il faut s'assoir parce qu'avec NY152, ça a été la prise de crâne à sept pages...
Woilà, t'chuces.
Re: retourner une chaine$
Publié : mar. 20/avr./2010 22:37
par Droopy
Une DLL ne peut pas retourner de chaine, mais l'adresse vers cette chaine oui
Re: retourner une chaine$
Publié : jeu. 22/avr./2010 9:37
par Geo Trouvpatou
Droopy a écrit :Une DLL ne peut pas retourner de chaine, mais l'adresse vers cette chaine oui
Ça confirme ce que j'avais lu dans la doc et c'est pour ça que dans le post auquel je fais référence, j'ai... enfin c'est surtout "f1roe" qui donne la solution dans le
7ème post en faisant un ProcedureReturn *string donc en retournant le début de l'adresse où se trouve stocké "string.s"
Bye.
Re: retourner une chaine$
Publié : jeu. 22/avr./2010 10:04
par Backup
................
Re: retourner une chaine$
Publié : jeu. 22/avr./2010 10:45
par Geo Trouvpatou
Je reprend l'exemple de la doc :
Code de la DLL :
Code : Tout sélectionner
Global ReturnString$
ProcedureDLL.s MaFonction(var$)
ReturnString$ = var$ + " test"
ProcedureReturn ReturnString$
EndProcedure
Ensuite de mon exemple :
Code : Tout sélectionner
If OpenLibrary(0, "DLLDoc.dll") ; <- Nom de ma DLL
String$ = PeekS(CallFunction(0, "MaFonction", "Testouille"))
Debug String$
EndIf
Et si mon code est correct, dis-moi ce que tu obtiens.
Chez moi cela ne fonctionne pas.
Parce qu'apparemment CallFunction n'accepte pas de paramètre de type String$
Pourtant si tu lis mon
1er post ici cela va dans ton sens puisque cela fonctionne, mais dans la procédure il n'y a aucuns arguments.
Alors est-ce que c'est cela qui fout la merde dans le code ci-dessus ????
Avec la technique de F1roe, aucuns problèmes pour avoir des paramètres de type String$.
Mais on est obligé de passer par des prototypes.
Si tu as un exemple simplet fonctionnel chez toi, alors met le code, que je zieute le truc.
Bye.