Page 2 sur 2

Re: [Résolu] CopyMemoryString() et FreeMemory()

Publié : ven. 03/déc./2010 0:10
par kernadec
bonsoir boddhi
Si tu est sous Vista ou Seven n'oublie pas qu'il faut une autorisation pour ecrire sur C
cela pourrait être un truc comme ça, Utilise un dossier pour le test.

Cordialement

Re: [Résolu] CopyMemoryString() et FreeMemory()

Publié : ven. 03/déc./2010 11:37
par boddhi
Ca y est, j'ai trouvé...

Les champs \pTo et \pFrom sont destinés, en réalité, à recevoir des listes de fichiers d'où la nécessité de séparer chaque nom de fichier par un $0 et, ce faisant, d'utiliser des buffers. Les chaînes classiques .s et $ ne sachant recevoir un $0 final.

Code corrigé:

Code : Tout sélectionner

Procedure.b Fc_DeplacementFichierVersCorbeille(ArgFichier.s)
  ; Retourne #True si suppression réussie
  Define.SHFILEOPSTRUCT Fichier
  Define.l Valeur
  Define *Tampon,*Tampon2
  Valeur=#True
  If FileSize(ArgFichier)>0
    *Tampon=AllocateMemory(Len(ArgFichier)+2)
    *Tampon2=*Tampon
    CopyMemoryString(ArgFichier,@*Tampon)
    CopyMemoryString(Chr(0),@*Tampon)
    CopyMemoryString(Chr(0),@*Tampon)
    Fichier\hwnd=0
    Fichier\pTo=0
    Fichier\wFunc=#FO_DELETE
    Fichier\pFrom=*Tampon2
    Fichier\fFlags=#FOF_ALLOWUNDO|#FOF_NOCONFIRMATION
    Valeur=SHFileOperation_(@Fichier)
    FreeMemory(*Tampon2)
  EndIf
  If Valeur=0:ProcedureReturn #True:Else:ProcedureReturn #False:EndIf
EndProcedure
@case
Là où tu ne voyais pas l'intérêt du recours aux buffers puisque je ne m'en servais pas après leur déclaration, j'avais commis une bourde :Fichier\pFrom=@ArgFichierau lieu de Fichier\pFrom=*Tampon2

A noter, depuis Vista, l'ajout d'une nouvelle interface IFileOperation.
Plus d'infos :
SHFileOperation_() : http://msdn.microsoft.com/en-us/library ... 85%29.aspx
IFileOperation : http://social.msdn.microsoft.com/Forums ... 254387936/

Re: [Résolu] CopyMemoryString() et FreeMemory()

Publié : ven. 03/déc./2010 12:18
par kernadec
bonjour boddhi
c'est très bien vu... et ça remet les idée, en place, merci,
Cordialement

Re: [Résolu] CopyMemoryString() et FreeMemory()

Publié : ven. 03/déc./2010 13:20
par case
ouki, bah je le voyais pas dans ton code , vu que tu l'utilisais pas ^^

sur ce merci pour le code ca peux servir ;)