Dank der Benutzung von with weiß der Compiler nicht genau, welches SizeOf er benutzen soll und entscheidet sich "zufällig" für das falsche SizeOf.
Nein, der Compiler weiß genau, welches SizeOf er benutzen soll: Das, was im kleinsten Scope ist, also:
- Methode aus dem mit with angegebenen Typ
- Unter-Funktion der aktuellen Methode
- Methode der aktuellen Klasse (+ ggf. Class Helper)
- Funktion aus aktueller Unit
- Funktion aus eingebundenen Units von hinten nach vorne
- System.SizeOf
(Wobei das noch komplizierter wird, wenn es mehrere Overloads gibt.)
Selbst ohne das with ist Zahl der Möglichkeiten also ziemlich groß.
/Klugscheißer
Einfachster Bugfix ist übrigens:
cbSize := System.SizeOf(LNID);
Damit ist dem Compiler die Wahlmöglichkeit genommen.
Er weiß aus Compilersicht, welches SizeOf er benutzen soll, er weiß aber nicht aus Programmierersicht, welches SizeOf dieser meint, dass es vom Compiler benutzt werden müsste
Compilierelogik und Erwartungshaltung führen nicht zwingend zum gleichen Ergebnis