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

Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu) - Delphi/Pascal - Programmation

Marsh Posté le 24-08-2003 à 16:33:02    

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
Reply

Marsh Posté le 24-08-2003 à 16:33:02   

Reply

Marsh Posté le 24-08-2003 à 16:39:47    

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
Reply

Marsh Posté le 24-08-2003 à 18:19:36    

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
Reply

Marsh Posté le 24-08-2003 à 19:36:54    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed