nutellahase
Level-2
- Beiträge
- 180
- Reaktionspunkte
- 28
-> Hier kostenlos registrieren
Hallo Leute!
Mit dem ANY-Pointer kann man ja ganz schöne Dinge anstellen, die so manchen zur Verzweiflung bringen. Ein Anwendungsfall für den ANY-Pointer ist z.B. um dynamische Funktionen zu erstellen. Da hatte ich bisher den Datentyp ANY im Eingangsbereich deklariert.
Vielleicht ein kleines Beispiel ... Ich habe ein Array mit 500 Elementen vom Datentyp INT ... dieses Array ist in einem Datenbaustein abgelegt und wird im restlichen Programm mit Werten gefüllt. Wenn ich jetzt eine dynamische Funktion benötige welche das komplette Array auf eine bestimmte Zahl durchsucht, kommt hier der symbolisch übergebene ANY-Pointer ins Spiel.
Ich weiß dass ein Element 2 Bytes groß ist. Nun kann ich mir aus den ermittelten Daten die im ANY-Pointer hinterlegt sind ja die Gesamtanzahl an Elementen berechnen. Die Zugriffsbreite beträgt 1000 Byte => 1000/2 = 500 Elemente. Die Datenbausteinnummer kann ich mir auch aus dem ANY-Pointer holen. Nun kann ich im weiteren Programm indirekt den DB durchsuchen und das Array auf eine bestimmte Zahl durchsuchen.
Der "Vorteil" bei diesem Vorgehen ist, dass ich dann jederzeit von außen ein anderes Array beschalten kann vorausgesetzt es ist vom Datentyp (bzw. bei Einsatz eines UDTs die Grundstruktur) gleich aufgebaut. Ist also meine übergebene Datenmenge nur 500 Byte groß, dann habe ich insgesamt 250 Elemente...
kurz gesagt: Ich lese aus einem dynamischen Bereich Informationen heraus.
Aber wie verhält es sich nun in die andere Richtung?? Ich möchte jetzt z.B. in einen dynamischen Bereich eine Information schreiben.
Und da fängt es bei mir dann ein wenig an zu haken ... mit schreiben verbinde ich mal automatisch einen Outputparameter. Habe ich allerdings einen ANY-Datentyp als Outputparameter und beschalte mein Array mit den 500 Elementen und möchte jetzt z.B. jedes ungerade Element mit einer bestimmten Zahl beschreiben, dann müsste ich doch erst wieder die Informationen aus dem ANY lesen => was dann wieder für Inputparameter spricht. Oder genauer gesagt wäre das ja dann ein In/Out Parameter (ich lese und schreibe in/aus einem Bereich).
Ich hoffe meine Frage ist halbwegs verständlich
.. vielleicht hat ja jemand ein Beispiel wo er schon mal einen ANY im In/Out bzw. Out Bereich verwendet hat. Für mich machen sie bei dynamischen Funktionen eigentlich nur im Inputbereich einen Sinn..
mfg
Mit dem ANY-Pointer kann man ja ganz schöne Dinge anstellen, die so manchen zur Verzweiflung bringen. Ein Anwendungsfall für den ANY-Pointer ist z.B. um dynamische Funktionen zu erstellen. Da hatte ich bisher den Datentyp ANY im Eingangsbereich deklariert.
Vielleicht ein kleines Beispiel ... Ich habe ein Array mit 500 Elementen vom Datentyp INT ... dieses Array ist in einem Datenbaustein abgelegt und wird im restlichen Programm mit Werten gefüllt. Wenn ich jetzt eine dynamische Funktion benötige welche das komplette Array auf eine bestimmte Zahl durchsucht, kommt hier der symbolisch übergebene ANY-Pointer ins Spiel.
Ich weiß dass ein Element 2 Bytes groß ist. Nun kann ich mir aus den ermittelten Daten die im ANY-Pointer hinterlegt sind ja die Gesamtanzahl an Elementen berechnen. Die Zugriffsbreite beträgt 1000 Byte => 1000/2 = 500 Elemente. Die Datenbausteinnummer kann ich mir auch aus dem ANY-Pointer holen. Nun kann ich im weiteren Programm indirekt den DB durchsuchen und das Array auf eine bestimmte Zahl durchsuchen.
Der "Vorteil" bei diesem Vorgehen ist, dass ich dann jederzeit von außen ein anderes Array beschalten kann vorausgesetzt es ist vom Datentyp (bzw. bei Einsatz eines UDTs die Grundstruktur) gleich aufgebaut. Ist also meine übergebene Datenmenge nur 500 Byte groß, dann habe ich insgesamt 250 Elemente...
kurz gesagt: Ich lese aus einem dynamischen Bereich Informationen heraus.
Aber wie verhält es sich nun in die andere Richtung?? Ich möchte jetzt z.B. in einen dynamischen Bereich eine Information schreiben.
Und da fängt es bei mir dann ein wenig an zu haken ... mit schreiben verbinde ich mal automatisch einen Outputparameter. Habe ich allerdings einen ANY-Datentyp als Outputparameter und beschalte mein Array mit den 500 Elementen und möchte jetzt z.B. jedes ungerade Element mit einer bestimmten Zahl beschreiben, dann müsste ich doch erst wieder die Informationen aus dem ANY lesen => was dann wieder für Inputparameter spricht. Oder genauer gesagt wäre das ja dann ein In/Out Parameter (ich lese und schreibe in/aus einem Bereich).
Ich hoffe meine Frage ist halbwegs verständlich

mfg