PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2013 22:26

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 44 messages ]  Aller à la page Précédente  1, 2, 3
Auteur Message
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Sam 21/Jan/2012 23:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4468
Localisation: Isere
Merci PAPIPP
C'est rigolo c'tte combine 8O
Je pensais qu'une fois qu'on redonnait la valeur courte a b$ on perdait les 6000 octets immediatement :roll:
Mais en fin de compte t'es un malin !!!! :D
Si je comprend, tu veux dire que comme on donne 6k de place juste avant a b$, l'exe n'a pas le temps d’écrire quoi que ce soit sur ces 6K :wink:
Pas mal la combine, pas mal.... à retenir aussi 8)

Par contre ça ne marche a mon avis plus si tu envois le b$ a un moment du programme, que ce dernier continue a bosser et reçois au bout d'un moment la valeur de b$
Car j'ai peur que dans ce cas l'EXE ai le temps de copier des choses dans les 6k qui ont été libérés en ecrivant b$="c:\Kcc" :roll:

En tout cas encore merci de la combine 8)

@DOBRO
Citation:
de plus dans l'absolu la fonction modifie une variable (chaine) qu'on lui donne..
elle ne vas pas chercher a poker une variable du prg appelant
Bah j'sais pas ce qui te faut, quant tu envoie un pointeur, j'vois pas ce que cette API pourrait faire d'autre que POKER avec...et c'est justement ça le bleme, elle POKE, elle POKE parce que si elle demandait l'autorisation a l'EXE, jamais il écrirait naturellement sur le Chr(0) :roll:

Citation:
de plus dans l'absolu la fonction modifie une variable (chaine) qu'on lui donne..
elle ne vas pas chercher a poker une variable du prg appelant
Ouuuiii !! cette methode j'ai du en entendre parler dans ma quette de plusieurs mois, pour la communication interprocess
Mais je l'ai zappé, parce qu'a force de faire des methodes, j'suis retourné aux pointeurs avant d'essayer.

Merci de la combine, c'est cool ce truc, ça pourrait me servir on sait jamais
C'est d'autant plus cool si ça peut passer par le reseau 8)
Je la met dans ma cu...dans hotte j'voulais dire 8)

Citation:
tu vois meme CROCRO se sert de fichiers (Ram_file) pour la transmission interProcess !
Bien sur que je le vois....des fois j'te soupçonne de pas tout lire ce que j'ecris, car le filemapping, les Sendmessages, la mémoire partagée, toutes ces méthodes que j'ai légèrement exploré, c'est bien aussi lui qui les a créée :roll:
D'ailleurs y'a tellement de méthodes qu'on arrive a se demander pourquoi y'en a tant 8O

Enfin on va pas se plaindre...mais la ou tu va me reconnaitre..comme quoi on fait pas d'un âne un cheval de course....
Et ben je préfère mes pointeurs à toutes ces methodes en API :mrgreen:
Pour une fois...qu'il faut utiliser les API..et ben j'ai pas envie :? :lol:

En tout cas encore merci, de ton partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 0:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 13085
Kwai chang caine a écrit:


@DOBRO
Citation:
de plus dans l'absolu la fonction modifie une variable (chaine) qu'on lui donne..
elle ne vas pas chercher a poker une variable du prg appelant
Bah j'sais pas ce qui te faut, quant tu envoie un pointeur, j'vois pas ce que cette API pourrait faire d'autre que POKER avec...et c'est justement ça le bleme, elle POKE, elle POKE parce que si elle demandait l'autorisation a l'EXE, jamais il écrirait naturellement sur le Chr(0) :roll:


tu ne m'a pas compris

lorsque tu fais :
PathAddBackslash_(a$) tu fournis a$
l'api poke A$ , mais ne cherche pas a poker X$, ou z$ qui serai dans ton prg appelant !

toi tu voudrais une dll qui puisse poker n'importe qu'elle valeur du prg appelant voir un tableau, une structure un liste etc ...
du moins c'est ce qui m'a semblé ..

ps: l'utilisation de :
pour une chaine
Code:
ret$=peeks( CallFunction(0, "PathAddBackslash", @a$) )

ou pour une valeur
Code:
ret= CallFunction(0, "PathAddBackslash", @a$)

est tout a fait normale !!
c'est meme LA façon de récupérer une valeur (chaine) renvoyé par une DLL
voir doc

l'autre façon c'est d'utiliser un prototype
ça reviens quasi au meme , sauf que ça gere les quads .etc ....

bon allez .. je retourne a EPB :)

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 0:30 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 204
@KCC

Voici le prg ASM généré par PB où l’on voit qu’a la deuxième affectation la routine SYS_fastAllocateStringFree peut effectivement reprendre une partie de la mémoire allouée.
Il faut demander à FRED si c’est le cas.

Code:
; a$="c:\Kcc"
   MOV    edx,_S3
   LEA    ecx,[v_a$]
   CALL    SYS_FastAllocateStringFree
; PathAddBackslash(@a$)
   MOV    eax,dword [v_a$]
   PUSH    eax
   CALL    _Procedure0
; b$=Space(6000)
   MOV    eax,[_PB_StringBasePosition]
   PUSH    eax
   PUSH    eax
   PUSH    dword 6000
   CALL    _PB_Space@8
   PUSH    dword v_b$
   CALL    _SYS_AllocateString4@8
; b$="c:\Kcc"
   MOV    edx,_S3
   LEA    ecx,[v_b$]
   CALL    SYS_FastAllocateStringFree
; PathAddNoirDeBackslash(@b$)
   MOV    eax,dword [v_b$]
   PUSH    eax
   CALL    _Procedure2
; Debug a$


@+


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 0:53 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 204
@KCC
Voici une nouvelle solution

Code:
ProcedureDLL PathAddBackslash(Path)
 

  mem=Path
  path$=ReverseString(PeekS(mem))
 
  If Mid(Path$,1,1)<>"\"
    Path$="\"+Path$
    Path$=ReverseString(Path$)
    PokeS(mem,path$)
  EndIf
 
EndProcedure

ProcedureDLL PathAddNoirDeBackslash(Path)
 

  mem=Path
  path$=ReverseString(PeekS(mem))
 
  If Mid(Path$,1,1)<>"\"
    Path$=RSet("",5000,"\")+Path$
    Path$=ReverseString(Path$)
    PokeS(mem,path$)
  EndIf
 
EndProcedure

a$="c:\Kcc"
PathAddBackslash(@a$)
b${6000}="c:\Kcc"
C$="jkjkksdjkldkls"
PathAddNoirDeBackslash(@b$)
Debug a$
Debug b$


avec l'ASM généré

Code:

;
; a$="c:\Kcc"
   MOV    edx,_S3
   LEA    ecx,[v_a$]
   CALL    SYS_FastAllocateStringFree
; PathAddBackslash(@a$)
   MOV    eax,dword [v_a$]
   PUSH    eax
   CALL    _Procedure0
; b${6000}="c:\Kcc"
   LEA    eax,[v_b$]
   PUSH    dword _S3
   PUSH    dword 6000
   CALL    _SYS_AssignFixedStringFast@8
; C$="jkjkksdjkldkls"
   MOV    edx,_S4
   LEA    ecx,[v_C$]
   CALL    SYS_FastAllocateStringFree
; PathAddNoirDeBackslash(@b$)
   PUSH    dword v_b$
   CALL    _Procedure2
; Debug a$
; Debug b$



La routine est ici _SYS_AssignFixedStringFast@8 je pense qu'elle ne rend pas la mémoire allouée.

@+


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 0:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4468
Localisation: Isere
Citation:
PathAddBackslash_(a$) tu fournis a$

Et ben un truc de guedin que je viens de m'appercevoir, c'est que moi je fournissais pas de string contrairement à ce que tu dit, mais bien un pointeur
Mais le plus fou c'est que ça marche comme tu le dis aussi 8O

On peut envoyer un pointeur ou une variable...
Si on pouvait faire ça a toutes nos procedure, ça nous simplifierais drolement la vie de pas avoir a choisir entre un long et un string :?
Quand tu pense que FRED il a obligé de passer tout en long, meme les strings
Avec cette technique, j'sais pas comment ils font mais c'est cool

Code:
a$ = "c:\kcc"
PathAddBackslash_(a$)
Debug a$

b$ = "c:\kcc"
PathAddBackslash_(@b$)
Debug b$


@PAPIPP
Bah j'y connais rien, mais je trouvais ça logique non ???
C'est un peu comme les disque durs, je suppose que des que y'a un trou, et que il a pas le choix, ou peut être même tout le temps, un EXE doit écrire dedans...
Mais comme tu le dit....c'est FRED qui pourrait nous éclairer
Citation:
Voici le prg ASM généré par PB où l’on voit qu’a la deuxième affectation la routine SYS_fastAllocateStringFree

Ou TU vois ..parce que moi, je vois juste le plus beau langage qui me fait rêver...
Mais a part rêver... :oops: :lol:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 0:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4468
Localisation: Isere
Ouaaahh j'savais meme pas qu'on pouvais forcer la taille d'une variable avec
Code:
b${6000}="c:\Kcc"
8O
J'ai jamais utilisé cette fonction

C'est sur que si tu bloque la mémoire, je pense qu'elle va pas piocher dedans :roll:
Mais dis donc, faut pas en abuser de cette fonction, sinon ça doit bouffer noir de mémoire :?

En tout cas merci beaucoup, je vais noter la combine 8)

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 9:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 13085
Kwai chang caine a écrit:
Ouaaahh j'savais meme pas qu'on pouvais forcer la taille d'une variable avec
Code:
b${6000}="c:\Kcc"
8O
J'ai jamais utilisé cette fonction


moi non plus 8O

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 10:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5323
Idem :)
C'est sûr qu'il doit pas falloir abuser de cette methode.

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 10:59 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 204
@KCC

Merci pour la correction L’ ON VOIT en TU VOIS
Mais en fait la difficulté pour moi, c’est de ne pas être aveugle ou miro comme je l’ai déjà dit à DOBRO. :lol: :lol: :lol:
@+


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 11:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 13085
PAPIPP a écrit:
@KCC

Merci pour la correction L’ ON VOIT en TU VOIS
Mais en fait la difficulté pour moi, c’est de ne pas être aveugle ou miro comme je l’ai déjà dit à DOBRO. :lol: :lol: :lol:
@+


je sais pas j'ai rien entendu j'suis sourding :lol:

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 11:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5323
Mais qui êtes vous ? (alzheimer man ^^)

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 11:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4468
Localisation: Isere
Citation:
Mais en fait la difficulté pour moi, c’est de ne pas être aveugle ou miro comme je l’ai déjà dit à DOBRO
Ouaih!! bah en attendant, j'aimerais bien être miro comme toi !! :roll:
Et savoir lire que des mots en majuscule ne dépassant pas quatre lettres :mrgreen:
Code:
PUSH la poubelle
MOV au boulot
JUMP dans la baignoire
etc ...
J'crois que je vais parler a ma femme et mes chiens comme ça, pour commencer à m'habituer à toucher mon reve :mrgreen:

Pour en revenir a ta super combine, c'est rigolo, parce que on fait
Code:
b${6000}="c:\Kcc"
puis juste apres
Code:
Len(b$)
et ben il remonte bien 6 8O
Donc en fait, je pense que le LEN s’arrête au premier chr(0) rencontré :roll:
Donc d’après toi, avec ta super fonction inconnue de pas mal de nous, la mémoire ne va jamais piocher dedans, car elle est attribuée a b$ ???
D'ailleurs je me demande a quoi elle sert cette fonction, y'a surement une utilité utile :mrgreen:
Remarque ça me donne une idée, qui sert surement a rien..mais on pourrait cacher une donnée juste derrière le chr(0), a la manière des portes au fond des armoires, le chr(0) faisant office de porte, et écrire dedans en étant sur que personne y touchera... :D
Bon tu va me dire avec un allocatememory c'est pareil..mais le coup de la porte cachée ça me plait :lol:

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 12:07 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 204
@KCC

Oui toutes le commandes PB relatives aux chaines de caractères sont limitées au premier octet $00 rencontré
Il en est de même pour les routines de PB ce qui simplifie le travail du compilateur PB.
Or lorsqu’on utilise une chaine de caractère fixe par définition on connait sa longueur.
Le compilateur dans ce cas peut effectuer une copie complète de la zone ce qui n'est pas le cas actuellement.
J'avais demandé il y a quelque temps si une modification pouvais être réalisée;

http://www.purebasic.fr/french/viewtopic.php?f=5&t=10945&p=118757#p118757
http://www.purebasic.fr/french/viewtopic.php?f=5&t=10945
Citation:
De toute manière ceci n’est pas de notre ressort mais de celui des concepteurs de PB qui doivent faire des essais.
Ceci fait aussi partie de la demande mais à priori il n'y a pas de problème.

(*1) la routine " _SYS_AssignFixedString" bien qu'elle connaisse la longueur de chaîne à copier s'arrête de copier lorsqu'elle rencontre $00. Je demande simplement que cette routine copie tout ce qu'elle rencontre sur la longueur demandée.


@+


Haut
 Profil  
 
 Sujet du message: Re: GetLastName(FullDirectory.s)
MessagePosté: Dim 22/Jan/2012 13:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4468
Localisation: Isere
D'accord, merci beaucoup PAPIPP pour tes explications
Quand j'ai lu cette ligne...je sais pas pourquoi..mais des sentiments profonds de désespoir à mon encontre, ainsi que de surcroit d'admiration et d'affection envers toi sont simultanément nés
Code:
"$"+RSet(Hex(PeekQ(@__HQ+2),#PB_Quad),16,"0")+RSet(Hex(PeekC(@__HQ+1),#PB_Byte),2,"0")+RSet(Hex(PeekC(@__HQ),#PB_Byte),2,"0")
C'est beau.... 8O
Et j'aurais pas dit mieux :mrgreen:
Si peut être ....quand j'me coince quelque chose dans un tiroir :D
Faudrait que je voie...ça peut peut être m'aider à devenir intelligent :roll:

En tout cas...je suis d'accord, j'ai pas le choix :oops: :lol:
Encore merci de partager ta connaissance 8)

Bon Week end

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 44 messages ]  Aller à la page Précédente  1, 2, 3

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye