Ich würde sagen, der Fehler beginnt schon beim Aufbau der Procedure, du rufst die procedure auf ohne zu wissen was du empfängst musst aber schon etwas übergeben (z.B. Integer-Pointer)
Deshalb würde ich dir empfehlen den Identifikationsbyte VOR aufruf der procedure auszulesen und danach entscheiden welche Variable übergeben werden muss, sonst wird's mit dem weiterarbeiten schwer...
die Case-Abfrage kannst du also eigentlich aus der Procedure rausziehen..
Dann z.B. bei einem unbekannten Format, das ganze "ignorieren", da du damit eh nicht weiterarbeiten wirst, da du ja nicht weißt was es ist..
bei einem String ruft du dann eine extra dafür geschriebene Procedure auf und übergibst als Parameter schon ein String
Ist es eine Integer-Variable rufst du eine LoadIntegerFromStream-Procedure auf (selbergeschriebene) und übergibst als Parameter eine Integer Variable..
Eine Umsetzung mit Pointerübergabe halte ich allgemein für ungut.. Tut mir leid, aber ich sehe da keinen Sinn drin, etwas in eine Gruppe einzuordnen, wenn man den Typ eh wieder "verschinden lässt" über den Pointer...
Da könntest du auch
Delphi-Quelltext
1: 2: 3:
| FStream.Read(n, 4); if n<=SizeOf(p^) then FStream.Read(p^, n); |
wäre so wie ich das sehe das gleiche, da du den Typ außerhalb deine Procedure scheinbar nicht beachtest