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