Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Delpi2007->XE2 geänderte Ereignis-Parameterliste (https://www.delphipraxis.net/165980-delpi2007-xe2-geaenderte-ereignis-parameterliste.html)

Keldorn 24. Jan 2012 19:12


Delpi2007->XE2 geänderte Ereignis-Parameterliste
 
Hallo,

ich habe eines meiner Projekte von Delphi2007 zu XE2 umgestellt.
Bsp, sahen 2 Ereignismethoden bei HTTPRio so aus
Delphi-Quellcode:
    procedure HTTPRioBeforeExecute(const MethodName: string; var {!} SOAPRequest: WideString{!});
    procedure HTTPRIOAfterExecute(const MethodName: string;SOAPResponse: TStream);
unter DelphiXE2 ist HttprioBeforeExecute jetzt so:
Delphi-Quellcode:
procedure HTTPRIO1BeforeExecute(const MethodName: string;SOAPRequest: TStream);
der Soaprequest ist jetzt auch ein Stream und kein Var-Parameter und widestring.
Prinzipiell ja nicht unschön, ist es wenigstens schön einheitlich und die notwendige Änderung ist auch schnell gemacht.

Großes Problem ist aber: Das Projekt wird trotzdem mit der alten Mehodenschreibweise kompiliert und gestartet.
Ich habe schon alle DCU´s gelöscht, mache Projekt erzeugen usw, nix, Delphi meckert nicht. Erst, wenn ich innerhalb der Proc etwas ändere (leerzeichen reicht schon) und dann nochmal kompiliere bekomme ich den erwarteten Fehler
Zitat:

Die <methodenname>, aufgerufen von <formularname>.<ereignisname> hat eine inkompatible Parameterliste. Soll der Aufruf entfernt werden?
was muß ich tun, damit ich solche (evtl. weiteren ?!) geänderten Ereignisparamterlisten finde oder mir das Delphi anzeigt?

Danke Frank

himitsu 24. Jan 2012 19:52

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
Die Signatur der Events in der DFM werden nicht geprüft.

Erst beim Zugriff/Aufruf mit der falschen Parametersignatur, knallt es, aufgrud der falschen Typen.

Leider scheint es keine komplett automatische Lösung dafür zu geben.


Ohne daß die Units neu kompiliert werden, wird es nicht geht, denn die DFMs werden ja sonst nicht geprüft. (nur die PAS wird auf ihre Änderung geprüft, aber nicht DFMs)
Alles neu erzeugen und dann müßte man den Methodennamen nehmen, sich aus der PAS die zugehörige Parametersignatur raussuchen und mit der Signatur des Ereignisses vergleichen.
(könnte man ja mal erstellen und via OTA reinschmuggeln)


manuelle Lösung selbstgefundener Fehler:
Entferne diese Methode und lasse sie neu erstellen (mit den richtigen Parametern)
z.B. die alte Methode im OI umbenennen, kurz eine andere Methodenvariable selektieren (damit wirklich umbenannt wird), dann zurück und den Methodennamen ganz rauslöschen.
Danach doppelt draufklicken (neu erstellen), und nur noch den Code umkopieren und anpassen.
Wenn die alte Methode nun leer ist (kein Code und keine lokalen Variablen), dann löscht Delphi diese später.

Keldorn 24. Jan 2012 20:02

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
ok, wenn ich so ein ereignis weiß, ist die Vorgehensweise klar.
aber wie kann ich solche Ereignisse finden, ohne das es später im Programm knallt?
Oder gibt es irgendwo eine Liste, wo einer solche geänderten Ereignisse sammelt?
Ist dir da was bekannt?

jaenicke 24. Jan 2012 20:07

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
Die Fehler zeigt Delphi ja schon an. Im Zweifelsfall das Projekt neu erstellen, dann werden die Units neu kompiliert. Aber da du ja noch keine von XE2 hattest, hätte das eigentlich ohnehin passieren müssen.

himitsu 24. Jan 2012 20:10

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
'ne Testmöglichkeiten hab ich grade reineditiert, aber nativ ist das in Delphi nicht vorhanden.

Bin selber mal darauf reingefallen, als ich eine Signatur änderte.

Bisher die einzige Lösung ist: Man darf keine Signaturen verändern! (wer das macht, ist fahrlässig blöd oder hinterhältig)
Nur altes Event löschen und unter einem anderem Namen mit der neuen Signazur veröffentlichen ist sicher.


Ich weiß nicht wie das in XE2 ist, aber in XE und 2010 bekommt der Compiler, selbst beim Neuerzeugen nicht immer mit, ob die Signatur paßt.

Bernhard Geyer 24. Jan 2012 20:21

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
Zitat:

Zitat von himitsu (Beitrag 1147439)
Ich weiß nicht wie das in XE2 ist, aber in XE und 2010 bekommt der Compiler, selbst beim Neuerzeugen nicht immer mit, ob die Signatur paßt.

Kann er nicht wissen. Die DFM Liegt als Ressource vor und die nimmt der Compiler, erzeugt Binärdarstellung und packt sie als Ressource in die Exe rein.

Keldorn 24. Jan 2012 20:53

AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1147438)
Die Fehler zeigt Delphi ja schon an. Im Zweifelsfall das Projekt neu erstellen, dann werden die Units neu kompiliert. Aber da du ja noch keine von XE2 hattest, hätte das eigentlich ohnehin passieren müssen.

Das habe ich ja.
weder Projekt erstellen noch alle DCU´s löschen führte zu irgendeiner Fehlermeldung. es gibt auch keine Warnungen

Ich kann das auch problemlos reproduziere.
- Delphi2007-> neues Projekt
- HttpRio auf die Form, onbefore und onafterexecute doppelklick und einen Kommentar rein, damit die Procs bleiben
- das Projekt dann in XE2 öffen komplilieren/erzeugen-> geht alles.
- erst, wenn in BeforeExecute was geändert wird, kommt es zur Fehlermeldung

Ich häng mal das Delphi2007 Projekt dran.

Furtbichler 25. Jan 2012 06:02

AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
 
Kann man kein grep über die DFM laufen lassen, da man die in Frage kommenden Signaturen bzw. Komponenten kennt? Alternativ im Code die richtige Signatur automatisch einbauen? Dann hagelt es beim Kompilieren Fehler, aber das will man ja gerade.

Könnte sogar mit RegEx gehen.

himitsu 25. Jan 2012 08:29

AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
 
In der DFM stehen keine Signaturen ... nur "Komponentennamen.Methodenname" oder maximal "Komponentennamen.Methodenname".

Bernhard Geyer 25. Jan 2012 08:31

AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
 
Zitat:

Zitat von himitsu (Beitrag 1147466)
In der DFM stehen keine Signaturen ... nur "Komponentennamen.Eventname".

Der Parser müsste die DFM durchsuchen und das Eventpropertie festzustellen welche Methoden auf Problematische Events gemappt sind. Dann in die Pas schauen wie die signatur der Methode aussieht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz