ich stehe vor einem Rätsel. ich habe bei einem Programm etwas "Kosmetik" betrieben und gerade gerückt, sicher nicht dem Standard folgend aber so wie ich momentan gerade formatieren mag.
Wenn ich das Programm "vorher" compiliere und "nachher" compiliere, entstehen leider 2 verschiedene EXE-Files. Die MD5-Summe ist unterschiedlich und viele Bytes der neuen EXE sind genau um hexadezimal 20 größer (ich habe TotalCommander zum Vergleich benutzt). Leider kann ich mir keinen Reim darauf machen, wie diese Differenz entsteht. Ein Funktionstest steht noch aus, aber das Phänomen beunruhigt mich erst mal.
Was habe ich schon probiert: Die Quelltexte, ALLE LEERZEICHEN ELIMINIERT (das habe ich grade noch so hinbekommen), enthalten die gleichen Zeilen und Zeichen.
Meine Folgerung: ich habe irgendwo in den Strings ein Leerzeichen übersehen.
Ja ich habe bei der Kosmetik automatisches Ersetzen gemacht zb ': ' in '; ' (mit Space) usw. Die gröbsten Schnitzer habe ich auch gefunden und rückgängig gemacht, leider finde ich das letzte nicht.
Der Compiler (FPC 3.22) und meine UNITs sind jedesmal die gleichen. Die Stringkonstanten scheinen (jetzt) auch alle gleich angelegt zu sein - damit hatte ich alle Differenzen (bis auf eine???) herausgefunden. Allerdings geht das mit dem um hexadezimal 20 größeren Bytes schon gleich am Anfang der EXE mit einem Byte los.
Nach meiner Vorstellung sollte doch der Quelltext die gleiche EXE liefern, egal wie die Variablen, Prozeduren usw heißen. Für mich wäre es ein Beweis, daß ich richtig "Kosmetik" betrieben habe und mir nicht einen Bug reingebaut, der nachher die Funktion beeinflußt.
Dadurch, daß ich schon mal gecheckt habe, ob alle anderen Zeichen außer Spaces übereinstimmen und beide Quellen compilierbar waren, habe ich doch das Problem schon eingegrenzt oder? Was sollen mir diese hexadezimal 20 sagen? Ist es eine Checksumme?
Ich würde ungern "neu" verwerfen und noch mal neu automatisch umbenennen. Natürlich habe ich jetzt mehr Erfahrung und weiß jetzt, welche Reihenfolge ich einhalten muß, weil der Teufel mit den Spaces vor den < oder : oder = (nur Beispiele) im Detail liegt. Ob "alt" funktionell alles kann, ist auch nicht gesagt, sonst müßte ich auf einen Stand von vorgestern gehen, aber ich suche optisch lieber in "neu" als in "alt".
Hat Lazarus eine automatische Formatierung? Vielleicht kann man auch "alt" und "neu" automatisch formatieren und dann schauen, wo der Unterschied wäre, denn es werden ja wohl automatisch nur die Zeilen und Zeichen außerhalb der Stringkonstanten verschoben?
Ich hänge mal meine Quellen in die Anlage - das Projekt ansich oder mögliche Anfängerfehler müssen nicht diskutiert werden, nur warum die EXE alt nicht so wie die EXE neu aussieht...
Vielen Dank für Tips
P.S. Anhang wieder entfernt, zu viel Drumherum wegen einem Space
