Seit ein paar Delphi-Versionen ist die Bereichsprüfung standardmäßig aktiv.
[0..0] oder [1..1] gibt es öfters, aber bei größerem Index knallen diese Prüfungen.
Tipp:
[1 .. MaxInt div SizeOf(MIB_IPADDRROW)] of MIB_IPADDRROW;
Alternativ die Pointer-Arithmetic aktivieren
und anstatt
PMIBIpAddrTable = ^TMIBIpAddrTable;
ein
PMIBIpAddr = ^MIB_IPADDRROW;
, welches sich auch via
.table[k]
zugreifen lässt.
Achtung, da beginnt es mit Index 0, also so als wäre es [0..x]
Und wenn 0, dann beim
for k := 0 to pIpTable^.dwNumEntries - 1 do
aufpassen, da dwNumEntries ein DWORD ist und es somit Probleme gibt, wenn dwNumEntries 0 wäre, da bei -1 dann 4 Millarden, anstatt -1 rauskommt.
OK, zum Glück ist heutzutage standfardmäßig die Überlaufprüfung aktiv und würde bei 0 - 1 schön knallen.
Also besser
to Integer(pIpTable^.dwNumEntries) - 1 do
(größer als 2 Milliarden wird dwNumEntries hoffentlich nie sein)
oder vorher ein
if pIpTable^.dwNumEntries > 0 then for ...
.