Delphi-Quellcode:
{...}
FPaperTrays : TStrings;
{...}
function TPrinterCustom.GetPaperTrays: TStrings;
var
pDevMode : PDeviceMode;
bin : array[0..255,0..23] of Char;
i : DWORD;
Res : DWORD;
PPrinter : PPrinterInfo2;
begin
if (FPaperTrays = nil) then
begin
try
FPaperTrays := TStringList.Create;
except
FPaperTrays.Free;
FPaperTrays := nil;
raise;
end;
end;
FPaperTrays.Clear;
if FAllInfos.Count <> 0 then
begin
PPrinter := FAllInfos.Items[FPrinterIndex];
pDevMode := nil;
Res := DeviceCapabilities(PPrinter^.pPrinterName,
PPrinter^.pPortName,
DC_BINNAMES,
PChar(@(bin[0][0])),
pDevMode);
for i := 0 to Res-1 do
FPaperTrays.Append(bin[i]);
end;
Result := FPaperTrays;
end;
Ich habe beim zweiten oder dritten Mal aufrufen das Problem, das ich einen AccessViolation-Fehlermeldung bekomme in der FOR-Schleife. Desweiteren wird das Ergebnis auch nicht wie gewollt mit den neu ermittelten Werten überschrieben.
Was mache ich falsch und was könnte man besser machen ? Das Ergebnis soll eine Liste mit allen Papierschächten des Druckers sein.