Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2709 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu)

n°495826
cpdump
Posté le 24-08-2003 à 16:33:02  profilanswer
 

J'ai un gros problème quand j'essaie d'écrire une zone mémoire vers un fichier dans la procedure ci-après.
 
Cette procedure est appelée lors d'un evenement changement de clipboard, p est un pointeur sur le contenu du clipboard (c'est du CF_TEXT, via GetClipboardData), cette zone mémoire est verouillée pendant l'appel de la procedure. Il n'y a que du texte dans le clipboard. Le fichier est bien ouvert en écriture.
 
Quand j'essaie d'ecrire le contenu du clipboard (Strlen(p)), j'ai une erreur de violation mémoire comme si je pointais n'importe où, par contre en écrivant seulement quelques octets (100 par ex) ça passe, mais le contenu ne correspond pas du tout au contenu du clipboard  :??:  
 
Au début je pensais que la mémoire était modifiée pendant que j'écrivais dans le fichier, mais pour vérifier j'ai rajouté l'affichage du clipboard dans le mémo après le BlockWrite et j'ai bien le contenu du clipboard donc la zone mémoire n'a pas été modifiée !
 
J'ai le même problème avec les TFileStream, j'ai même essayé de recopier cette zone mémoire ailleurs pour l'écrire en dehors de la procédure et c'est le même problème.
 
Je ne vois pas d'ou peut venir l'erreur, c'est le même pointeur que j'utilise dans le 2 cas, je n'y comprend rien  :??:  
 

procedure TMonClipboard.ProcessClipboard(clipformat : integer; p : pchar);
var
begin
    Form1.Memo1.Lines.Add(Format('Clipboard Format n° %d et Taille = %d',[clipformat, Strlen(p)]));
    BlockWrite(filesample, p, 100);
    Form1.Memo1.Lines.Add(StrPas(p));
end;


Message édité par cpdump le 25-08-2003 à 10:31:10
mood
Publicité
Posté le 24-08-2003 à 16:33:02  profilanswer
 

n°495829
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-08-2003 à 16:39:47  profilanswer
 

Tu dois donner p[0] à BlockWrite, et pas juste p
Il s'attend à une variable (passée en "var" donc il recevra en fait un pointeur), pas à un pointeur (sinon il reçoit un pointeur de pointeur).


Message édité par antp le 24-08-2003 à 16:42:54

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°495865
cpdump
Posté le 24-08-2003 à 18:19:36  profilanswer
 

Merci, c'était bien ça, je suis un newbie en Delphi  :D  
 
Je trouve que la gestion des pointeurs en C et C++ est bien plus cohérente qu'avec Delphi  :kaola:  
 
Est ce que Borland offre une version gratuite du C++Builder comme le Delphi Edition personnelle ? (j'ai pas l'impression malheuresement)


Message édité par cpdump le 24-08-2003 à 18:22:01
n°495911
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-08-2003 à 19:36:54  profilanswer
 

cpdump a écrit :


 
Je trouve que la gestion des pointeurs en C et C++ est bien plus cohérente qu'avec Delphi  :kaola:  


 
:??: je vois pas pourquoi.
 
var = passage par référence du C++
 
Et il n'y a pas de version gratuite de C++Builder.


Message édité par antp le 24-08-2003 à 19:37:48

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu)

 

Sujets relatifs
[html css] l'id des div doit etre unique? resoluIntercerpter des messages depuis une sous-classe de TComponent [resolu
[CSS] probleme de couleurs resolu[VB] comment compiler un fichier *.vbp ? rep= MS Visual Basic
php et date Oracle[résolu]une comande dos pour commaitre la propriete accessed d'un fichier
Problème avec boucle [résolu]checkbox multiples [résolu]
[QBasic] COmpiler un fichier .bas??Remplir une zone de liste avec 2 plages nommées ???
Plus de sujets relatifs à : Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR