Autor Beitrag
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Mo 27.10.08 18:59 
Sorry wegen Titel, aber keine AHnung, wie man das Problem mit ein paar Worten beschreiben kann :(

Ich habe eine Deklaration für einen Funktionstype (Event für Delphi-Komponente)Type TMyEvent = procedure(Sender: TObject; aRec: Pointer) of object;

Dieses Event gebe ich auch in aRec innerhalb einer Struktur mit, das Rekord deklariert sich ungefähr so :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Type RMyRec = packed record
       nID : Integer;
       ...
       aEvent : TMyEvent;
     end;


Nun würde ich aber gern im Event das aRec nicht als Pointer übergeben, sondern typisiert, allerdings geht das nicht so einfach, da

a) beide im Interface-Teil stehen müssen (wegen Sichtbarkeit) und
b) offensichtlich sich beide kennen müssen

hat einer 'ne Idee, wie man das lösen kann ?

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 27.10.08 20:57 
Obwohl technisch nichts dagegen spricht lässt der Compiler dies nicht zu. Eine Forward-Deklaration bei Records gibt es nicht. Du müsstest mit Pointers arbeiten, mit Klassen oder mit Casts (im Record TMethod angeben und vor dem Aufruf auf TMyEvent casten).

Delphi lässt Forwarddeklarationen bei records nicht zu, weil bei rekursiven Recorddeklarationen die Grösse der Records nicht definiert wäre. In diesem Fall wird diese zu restriktive Einschränkung zum Verhängnis.

Gewisse rekursive Definitionen (Stichwort Units) lassen sich in Delphi leider nicht lösen. Ein häufiger Kritikpunkt.
HelgeLange Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Mo 27.10.08 23:16 
Naja, werd ich wohl weiterhin damit leben müssen, im Event immer auf den Type zu casten :(
Dachte nur, dass wenn ich eh schon am Aufräumen bin (muss alles etwas umbauen für Delphi2009 mit seinen neuen UnicodeStrings), dann kann ich das auch gleich in Angriff nehmen...

Danke für die Antwort..

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 28.10.08 14:17 
Delphi sollte bedingt "Forward"-Deklarationen zulassen, wenn beide Typ-Deklarationen im gleichen Type-Block definiert sind. Hab das aber grad nicht getestet.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.