Registriert seit: 8. Mär 2006
Ort: Hamburg
43 Beiträge
Delphi XE Starter
|
Speicherleck in WinSpool.OpenPrinter API ???
24. Aug 2011, 01:10
Habe folgendes Problem, mit einem Timer wird die u.a. Funktion alles 5 sek aufgerufen, soweit so gut.
Das Problem ist nun das der Arbeitsspeicher verbrauch jede 5 sek. um 12kb ansteigt (laut Windows Taskmgr) Obwohl die Funktion doch den Speicher wieder frei gibt!!!
Hab ich was übersehen?
Gruß Olli
Delphi-Quellcode:
function print_jobs(printer_index: integer) : integer;
type
PJobs = ^TJobs;
TJobs = array[0..0]of TJobInfo2;
var
Needed, JobCounter : DWORD;
i : Integer;
Device, Driver, Port : array[0..255] of char;
hPrinter, hDeviceMode : THandle;
Buffer : Pointer;
Job : PJobs;
const
NoJobs = 100;
begin
//TEIL1
Printer.PrinterIndex := printer_index;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if WinSpool.OpenPrinter(@Device, hPrinter, nil) then
begin
EnumJobs(hPrinter, 0, NoJobs, 2, nil, 0, Needed, JobCounter);
//GetMem(Buffer, Needed);
Buffer := AllocMem(Needed);
try
Job := Buffer;
if EnumJobs(hPrinter, 0, NoJobs, 2, Buffer, Needed, Needed, JobCounter) then
begin
Form1.LabeledEdit2.Text := IntToStr(JobCounter);
if JobCounter > 0 then
begin
result := 1;
end;
for i := 0 to JobCounter - 1 do
begin
if Job[i].pDocument <> nil then
Form1.LabeledEdit3.Text := IntToStr(Job[i].TotalPages);
end;
end;
finally
FreeMem(Buffer, Needed);
end;
WinSpool.ClosePrinter(hPrinter);
end;
sleep(10);
end;
Oliver
|
|
Zitat
|