Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: EnumPrinterDrivers = Zugriffsverletzung (Anfängerfrage)

  Alt 10. Mär 2017, 14:47
Wie kann ich anhand der zurückgelieferten Bytes die Anzahl der Array Einträge ermitteln, die ich für ein SetLength benötige?
Das kommt drauf an. Werden neben den DRIVER_INFO_2 Strukturen zusätzlich auch die Strings (die in den einzelnen Einträgen per Pointer referenziert werden) oder andere Sachen im Buffer abgelegt?

Nein:
Einfach die Anzahl der Bytes durch SizeOf(TDriverInfo2) teilen.

Ja:
In diesem Falle würde ich von Anfang an mit einem untypisiertem Buffer (GetMem ) arbeiten. In pcReturned gibt die API dir die Anzahl der Elemente zurück, also kannst du einfach iterieren:
Delphi-Quellcode:
var
  Buf: PDriverInfo2;
  ..
begin
  // Größe ermitteln, etc ..
  GetMem(Buf, pcbNeeded);
  try
    if EnumPrinterDrivers(...) then
    begin
      for I := 1 to pcReturned do
      begin
        // Mach was
        // ..
        // zum nächsten Element springen
        Inc(Buf);
      end;
    end;
  finally
    FreeMem(Buf);
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat