![]() |
RTL ändern und neu erstellen
Hi,
ich möchte einige sachen (z.b. in der sysutils.pas lowercase ÄÖÜ mit reinehmen) ändern. Wie mache ich das? Bzw. wie bekomme ich das wieder sauber übersetzt? In google und hier im forum habe ich nix gefunden. Eventuell falsch gesucht?!? Vielen dank im voraus |
AW: RTL ändern und neu erstellen
Ich will dich hiermit echt nicht davon abhalten das zu tun, aber an der Stelle eine Warnung: es ist eigentlich nie eine gute Idee die RTL oder VCL zu ändern und neu zu compilieren. Warum schreibst du nicht deine eigene Methode und nutzt diese?
|
AW: RTL ändern und neu erstellen
Geht nicht - gibt es nicht.
Schau dir aber mal die Hookingtechnik der TNTWare-Kompos an. Damit kannst du Funktionen der RTL mit eigenen Code überschreiben. |
AW: RTL ändern und neu erstellen
Ich weiss das das eine sache am "offenen Herzen" ist. Deswegen möchte ich ja auch wissen wie ich das wieder "sauber" übersetzt bekomme. Mein erster versuch ist kläglich gescheitert. Danach hatte ich gaaanz komige sachen. Z.b. konnte ich in einem Stream nicht 128 vom ende zurück gehen. Ich musste vorwärts gehen und von der länger 128 abziehen.
Aber das ist wohl wegen dem falschen neu übersetzen passiert. Deswegen möchte ich gerne wissen wie man das richtig macht. EDIT: Öhm, geht das wirklich nicht? |
AW: RTL ändern und neu erstellen
Gehen ist eine Sache, ob es sinnvoll ist eine andere...
Stell dir vor du willst den Quelltext z.B. jemandem weitergeben, schon funktioniert es dort nicht mehr sofort. (Von Inkompatibilitäten zwischen den Delphiversionen mal ganz zu schweigen.) Und gerade dein Beispiel ist ja wohl eher ein Beispiel für einen Fall, in dem es absolut nicht sinnvoll wäre... Zitat:
Eine Wrapperfunktion, die das in der SysUtils dann aufruft, fertig. Und schon geht es nicht nur mit Änderungen an der Delphiinstallation usw. Nebenbei ein kleiner Tipp: Nimm in diesem Fall einfach AnsiLowerCase statt LowerCase... |
AW: RTL ändern und neu erstellen
Soweit ich mich erinnere kannst du die System.pas nicht compilieren, weil eine Datei fehlt. Alles andere sollte gehen, aber ich kann davon auch nur abraten.
z.B geht der Zirkus schon los, wenn du eine Komponente installieren willst, von der du den Quelltext nicht hast : "Die Unit xxx wurde mit einer anderen Version von xxx Kompiliert". Wenn es sich um Klassen handelt, die du erweitern willst, schreib dir Class Helper ( Ab Delphi 8 ), wenn du normale Proceduren ändern willst, schreib dir die einfach neu. Bei Proceduren und Functionen, die von der Kompiler-Magic benutzt werden, siehts wahrscheinlich ganz grau aus. Dazu ändert sich schlagartig das Verhalten sämtlicher Komponenten. Die Wahrscheinlichkeit, daß die Komponenten noch funktionieren geht gegen 0 |
AW: RTL ändern und neu erstellen
Man könnte es zwar neu kompilieren, aber ich rate stark davon ab.
Sowas sollte man maximal für wichtige Bugfixes in Betracht ziehen. Du willst aber das Verhalten einer Funktion ändern, welche nur auf ASCII ausgelegt ist. AnsiLowerCase ist also die einzig "richtige" Lösung. Installierst du irgendwann mal dein Delphi neu oder steigst du auf ein neues Delphi um, dann bekommst du arge Probleme, wenn man (nach Jahren) dann mal vergißt dieses wieder "anzupassen". :zwinker: PS: Bei TDE und Delphi Starter kannst du es vergessen, da dir dort die Quelltexte fehlen. Und willst du wirklich nur ASCII mit ÄÖÜ, dann erstell dir eine eigene Funktion (MyLowerCase) und lege sie in einer eigenen Unit ab. |
AW: RTL ändern und neu erstellen
Ich hab das
![]() Befriedigend fand ich das aber trotz allem nicht. Auch in Pro und Ent fehlten Dateien, um die Packages etwa neu zu übersetzen (ich glaube das entsprechende QC-Ticket ist heute noch offen ;) ). Für den Rest habe ich halt den Suchpfad entsprechend erweitert und die Binärversionen gelöscht. Trotzdem - je nach Umfang der Änderungen scheiterte es an einer rekursiven Nutzung von Variants (oder so ähnlich, ist ne Weile her). Für den Anwendungsfall hier kann ich daher auch nur dringend anraten, die Finger davon zu lassen. Selbst ohne AnsiLowerCase würde ich in solchen Fällen höchstens eine Kopie der Funktion aus SysUtils.pas machen und diese Kopie in meiner eigenen Unit anpassen. Dann sorgt die Reihenfolge der Unit-Einbindungen dafür, daß ich nur am Kopf etwas ändern muss und nicht jeden einzelnen Aufruf - fertig. |
AW: RTL ändern und neu erstellen
Du kannst die von Borland/Codegear/Embadings Delphi-Packages nicht neu übersezten. Damit wäre sonst die absolute BPL-Hölle angesagt wenn dann diese BPL nicht nur in den Versionen "Ursprungslieferung", "SP1", "SP" für jede Delphi-Version vorlägen sondern auch in Packageversion "SP2-Entwickler-Herbert", "SP2a-Entwickler-Hubert".
Du kannnst (solltest jedenfalls) die Packages in neuer Zusammensetzung bereit stellen um gegen sie zu kompiliern. Auch ist es möglich (Durch Speichern der angepassten Units in entsprechende Dxxx-Patch-Diretories) gegen diese angepassten Units zu kompilieren wenn man keine Laufzeitpackages verwenden will. Und wie gesagt: Schau dir TNT an um zu sehen wie dort Funktionen "gepatcht" werden (Hab selbst ein paar eigene entsprechend eingbaut um Fehlverhalten der RTL fixen). Übrigens: Lässt es Microsoft zu das die MFC/ATL-Dlls jeder x-Beliebige user Neu compiliern kann um seine persönlichen Patches bereitzustellen? Und kannst du .NET oder JRE selbst übersetzen? |
AW: RTL ändern und neu erstellen
Erstmal vielen dank. Ihr habt natürlich recht. Da ich nicht beratungsresistent bin, lass ich mal die finger davon. Beim abwägen vom für und wieder dieser sache fällt einem auf das es eine "schnapsidee" war.
Auch das mit den Komponenten die dann rum meckern das die version nichtmehr stimmt, würde mir garnicht gefallen. Daran hatte ich garnicht gedacht. Manchmal meint man, man(n) hätte eine gute idee. Im nachhinein muss man(n) aber einsehen das es blödsinn war. Vielen dank an euch. :thumb::thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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 by Thomas Breitkreuz