![]() |
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:
unter DelphiXE2 ist HttprioBeforeExecute jetzt so:
procedure HTTPRioBeforeExecute(const MethodName: string; var {!} SOAPRequest: WideString{!});
procedure HTTPRIOAfterExecute(const MethodName: string;SOAPResponse: TStream);
Delphi-Quellcode:
der Soaprequest ist jetzt auch ein Stream und kein Var-Parameter und widestring.
procedure HTTPRIO1BeforeExecute(const MethodName: string;SOAPRequest: TStream);
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:
Danke Frank |
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. |
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? |
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.
|
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. |
AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
Zitat:
|
AW: Delpi2007->XE2 geänderte Ereignis-Paramerliste
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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. |
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. |
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
In der DFM stehen keine Signaturen ... nur "Komponentennamen.Methodenname" oder maximal "Komponentennamen.Methodenname".
|
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Zitat:
|
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Zitat:
(hatte ich schonmal so ähnlich erwähnt) |
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Mit der "Open/Close all forms"-Funktion von
![]() |
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Zitat:
|
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Zitat:
|
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Zitat:
Mich hat das aber auf ne kleine Idee gebracht, das wird aber noch etwas dauern, melde mich nochmal Gruß Frank |
AW: Delpi2007->XE2 geänderte Ereignis-Parameterliste
Hallo,
wie ihr das mit den Signaturen meint, ist mir zwar noch nicht ganz klar :oops:, aber ich habe mir aus den verschiedenen genannten Ansätzen ein kleines Prog gebastelt. Es parst die dfm nach allen Ereignissen und sucht die dazugehörige Methode in der Pas. Das ganze wird dann in eine eigene unit + Klasse packt. Die Ereignis-methoden werden dann per code zugewiesen, dort meckert dann auch der Compilier, daß die Paramterliste anders ist. Konnte damit aber keine weiteren geänderten Parameterlisten finden. Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz