![]() |
Resourcestring vs. const
Hallo zusammen,
ich bin jetzt seit Mai dabei Delphi zu lernen und dabei bin ich über diesen ![]()
Delphi-Quellcode:
Hier ist von einem sogenannten "resourcestring" die Rede, klingt extrem kompliziert und da fragt man sich was das eigendlich den macht. Allerdings wenn man dann über den Code drüber ließt findet man nur eine Anwendung von diesem Intressanten Construkt. Und genau an dieser Stelle wird es benutzt wie eine Constante. Warum also nicht einfach "const" nehmen?procedure TForm1.Button1Click(Sender: TObject); var retValue : DWORD; ProcessList : TPIDList; i : Integer; ProcessName : string; PID : DWORD; resourcestring // <- diese Stelle rsUnknown = 'unbekannt'; begin // VCL causes last error to be set, even nothing has already happend :-/ SetLastError(0); retValue := GetProcessList(ProcessList); if retValue = 0 then begin for i := 0 to length(ProcessList) - 1 do begin PID := ProcessList[i]; if GetProcessName(ProcessList[i], ProcessName) <> 0 then ProcessName := rsUnknown;// <- hier Listbox1.Items.Add(IntToStr(PID) + ' - ' + ProcessName); end; end else ShowMessage(SysErrorMessage(retValue)); end; Ich hab dann mal weiter gesucht und hab dann intressante Sachen gefunden wo das verwendet wird, ![]() ![]() Vielen Dank fürs Helfen, Tobi |
Re: Resourcestring vs. const
Ressource-Strings haben den Vorteil, dass sie, wie der Name schon sagt, in Ressourcen gespeichert werden. Dadurch lassen sich die Anwendungen leichter übersetzen (dann muss im Grunde nur noch die Ressoucre ausgetauscht oder eine andere DLL eingebunden werden).
|
Re: Resourcestring vs. const
Also zusammengefasst kann man sagen:
Resourcestrings sind wie Const, heißen nur anders damit man sie beim lesen als solche erkennt? Und haben KEINE Besonderheiten wie zum Beispiel das sie anderes im Speicher abgelegt werden? |
Re: Resourcestring vs. const
Zitat:
|
Re: Resourcestring vs. const
Zitat:
|
Re: Resourcestring vs. const
Sie werden im Programm genauso behandelt, allerdings muss man das Programm nicht neu kompilieren, um diese auszutauschen.
Wenn du eine andere Sprache unterstützen möchtest, genügt es eine DLL mit zu geben oder nach zu liefern, die noch einmal alle Resourcen in der jeweiligen Sprache enthält. |
Re: Resourcestring vs. const
Zitat:
|
Re: Resourcestring vs. const
Liste der Anhänge anzeigen (Anzahl: 1)
Konstanden werden quasi direkt ersetzt
Delphi-Quellcode:
// Delphi macht intern aus
const c = 'abc'; MyProc(C); // ein MyProc('abc'); // und aus resourcestring c = 'abc'; MyProc(C); MyProc(LoadString(ID)); // ID = die StringID in den Resourcen ![]() [edit] Zitat:
|
Re: Resourcestring vs. const
Zitat:
Delphi-Quellcode:
Delphi 2007 sagt: Adresse ist gleich
const
s = 'abcd'; var a, b: string; begin a := s; b := s; if Pointer(a) = Pointer(b) then ShowMessage('Adresse ist gleich') else ShowMessage('Adresse ist ungleich'); end; Ich glaube der Delphi-Compiler macht das schon immer so. |
Re: Resourcestring vs. const
Zitat:
Oder meinst du das nach dem Kompiliern, vor dem Linken? Also irgendwo in den Objektdateien, wenn es sowas bei Delphi noch gibt? |
Re: Resourcestring vs. const
Ich hab mich da auf die Onlinehilfe von Delphi 2K6 verlassen, in der zu resourcestrings folgendes steht:
Zitat:
|
Re: Resourcestring vs. const
Zitat:
Wenn da mußt du die Adresse der Konstante mit deiner Variable vergleichen bzw. folgenden Test machen
Delphi-Quellcode:
Und jetzt kontrollieren wie oft 'BlaBla %s' in der Exe vorhanden ist.
const
cMyString = 'BlaBla %s' ... s1 := Format(cMyString, 'xyz'); ... s2 := Format(cMyString, 'abc'); |
Re: Resourcestring vs. const
Zitat:
Da man dies - wie schon gesagt - hauptsächlich dafür einsetzt eine neue Sprache seinem Programm hinzuzufügen (was , egal ob nach oder vor dem compilieren, mit Ressourcen deutlich einfacher geht), gibt es auch spezielle Programme (bspw: in Delphi ist der Translationmanager dabei) für die Übersetzungen. |
Re: Resourcestring vs. const
Zitat:
|
Re: Resourcestring vs. const
Ich habe da noch eine ganz andere frage zu:
Ich definiere 1000 Strings mittels const, referenziere die aber kein einziges mal. Ich hoffe mal, dass die niemals mit in die Exe gelinkt werden. Bei resourcestring bin ich mir dagegen nicht so sicher - zumindest sind irgendwie alle strings aus "Consts.pas" (und andere) immer enthalten. |
Re: Resourcestring vs. const
Ich hoffe mal, daß auch bei den ResourceStrings der Kompiler nur diese mit einlinkt, welche auch verwendet wird.
Was die Strings aus der Const.pas angeht, da werden die Funktionen wo diese enthalten sind oftmals verwendet und z.B. über die VCL oder Initialisations-Abschnitte vieler Delphi-Units genutzt und demnach werden die Strings irgendwo "theoretisch" und demnach auch mit eingebaut. |
Re: Resourcestring vs. const
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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