bon voila je veux faire un outil d'administration dans le style de vnc, je prend donc un screen sur la partie serveur, je la stoque dans un stream, j'envois le stream par socket, je récupere le stream sur le client et je recharge l'image qui es contenue dans le stream

je n'ai aucune erreur lors de la compilation mais lors des teste, j'ai des erreur mémoire. voici mon code :

coté serveur :

définition de toutes les variables suivit de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
TempStream :=TMemoryStream.Create;
ImageBureau.Bitmap.Width := Screen.Width; ImageBureau.Bitmap.Height := Screen.Height;
BitBlt(ImageBureau.Bitmap.Canvas.Handle,0,0,Screen.Width,Screen.Height,
GetDC(GetDesktopWindow),0,0,SrcCopy);
ImageBureau.Bitmap.SaveToStream(TempStream);
serversocket1.Socket.SendStream(TempStream);

et coté client :

définition de toutes les variables suivit de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
while Socket.ReceiveLength > 0 do begin
Buffer := AllocMem(Socket.ReceiveLength);
try
Socket.ReceiveBuf(Buffer^, Socket.ReceiveLength);
tempstream.Write(Buffer^, StrLen(Buffer));
finally
FreeMem(Buffer);
end;
tempstream.Seek(0, soFromBeginning);
ImageBureau.Bitmap.LoadFromStream(tempstream);
Image5.Picture.Bitmap:=ImageBureau.Bitmap;
end;
et le message d'erreur ce produit actuellement sur le serveur et est le suivant :
Le projet project1.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'acces à l'adresse 0041EF23 dans le module 'project1.exe'. Lecture de l'adresse 0000000C'. Processus stoppé. Utilisez pas-à-pas ou executer pour continuer.


merci d'avance

Balises de code ajoutées par Pierre Castelain.
Pensez-y à l'avenir