Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Funktion die TStrings zurückgibt

  Alt 6. Jun 2010, 17:21
Delphi-Version: 2010
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat