retourner une chaine$

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

retourner une chaine$

Message 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 @.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: retourner une chaine$

Message 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.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: retourner une chaine$

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: retourner une chaine$

Message par Backup »

...............
Dernière modification par Backup le sam. 19/mars/2011 17:48, modifié 1 fois.
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: retourner une chaine$

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: retourner une chaine$

Message par Backup »

................
Dernière modification par Backup le sam. 19/mars/2011 17:48, modifié 1 fois.
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: retourner une chaine$

Message 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 ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: retourner une chaine$

Message par Backup »

:lol: :lol: j'en etait sur !!

que tu ai confondu Chaine et liste chainée :D
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: retourner une chaine$

Message par Geo Trouvpatou »

Salut.

Sinon tu peux lire ce post.

Et plus précisément mon tout dernier post.

Bye.
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: retourner une chaine$

Message 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 ^^
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: retourner une chaine$

Message 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.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Re: retourner une chaine$

Message par Droopy »

Une DLL ne peut pas retourner de chaine, mais l'adresse vers cette chaine oui
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: retourner une chaine$

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: retourner une chaine$

Message par Backup »

................
Dernière modification par Backup le sam. 19/mars/2011 17:49, modifié 1 fois.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: retourner une chaine$

Message 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.
Répondre