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;