Lasst doch einfach mal die Operatoren so, wie wir sie seit Turbo Pascal 7.0 kennen, ich habe gerade dieses Konstukt (fett gedruckt):
Code: Alles auswählen
function GetDDrawModes:hresult;
var
DD : iDirectDraw;
hr : hResult;
begin
gfxNumModes := 0;
DD:=nil;
hr:=DirectDrawCreate(nil, DD, nil);
if hr = DD_OK then begin
hr:=DD.EnumDisplayModes(0, nil, nil, @EnumAllModesCallBack);
DD:=nil;
end;
GetDDrawModes:=hr;
end;
wo mir der Compiler diese Fehlermeldung ausspuckt:
WINDX.INC(48,62) Error: Incompatible type for arg no. 4: Got "<address of function(PDDSURFACEDESC;Pointer):LongInt;StdCall>", expected "<procedure variable type of function(PDDSURFACEDESC;Pointer):LongInt;CDecl>"
Warum, zum Teufel erkennt der Compiler dieses Kontrukt nicht an? In Delphi kann ich ohne Probleme auf diese Weise einen Prozedurzeiger (Adresse der Prozedur (oder Funktion) übergeben. Warm nicht auch in Freepascal?
Was soll ich da jetzt hier machen, damit ich die Adresse der Prozedur (oder Funktion) mit dem Namen EnumAllModesCallBack übergeben kann? Weglassen des "@"-Zeichens funktioniert hier nicht!
Nervig, wenn durch immer neue Konstrukte, die dann angeblich soooo viel besser sind als die alten, gewohnten, eingeführt werden, die der Programmierer aber dann nicht nutzen kann, weil sich die Syntax alle jubel-Jahre ändert!
Auch die Anwender der IDE programmieren zum großen Teil in ihrer kostbaren Freizeit. Auch jetz bei dem schönen Sommerwetter.
Lasst doch einfach die vorhandenen Sprachelemente, die vorhanden Syntax, wie sie schon immer war. Neue Sprachkonstrikte könnt Ihr dann gerne hinzufügen, aber bitte, ohne die alten einfach zu entfernen, weil die angeblich sooo uneffektiv sind. Ich komme da schneller, wenn ich die alten Konstrikte, wie ich sie seit Beginn von Turbo Pascal und Freepascal kenne einfach weiter verwenden kann und so das anvisierte Programm erst mal läuft. Optimieren, dann auch gerne unter evtl. extrm mühsamer Aneignung all der tollen neuen Konstrukte, kann ich später, wenn das Programm erst mal Läuft später immer noch!!!