AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Resourcestring vs. const

Ein Thema von Highttower · begonnen am 15. Sep 2009 · letzter Beitrag vom 16. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2   
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#1

Resourcestring vs. const

  Alt 15. Sep 2009, 16:48
Hallo zusammen,

ich bin jetzt seit Mai dabei Delphi zu lernen und dabei bin ich über diesen Code hier gestolpert. Was ich hier nicht verstehe ist die Funktion Button1.Click

Delphi-Quellcode:

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;
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?

Ich hab dann mal weiter gesucht und hab dann intressante Sachen gefunden wo das verwendet wird, DLLs, nonVCL Anwendungen usw. aber nirgends wird erklärt: Wozu verwendet man das? Kann man auch einfach Konstanten benutzen? Oder wird das zur Prozessinterkomunikation gebraucht?

Vielen Dank fürs Helfen,

Tobi
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 16:56
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).
  Mit Zitat antworten Zitat
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 16:58
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?
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:02
Zitat von Highttower:
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?
Nein, ressourcestrings sind zwar String-Konstanten, sie werden aber anders gespeichert als normale Konstanten, damit man z.B. Anwendungen einfacher in andere Sprachen übersetzen kann, ohne jedesmal den kompletten Sourcecode anfassen und neu compilieren zu müssen. Im besten Fall brauch man mit Ressourcestrings nur eine einzelne Datei austauschen, um eine Anwendung z.B. von Englisch nach Französisch zu übersetzen.
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:03
Zitat von Highttower:
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?
Das hab ich doch versucht zu erklären: Resource Strings werden in Ressourcen abgespeichert. Normale Konstanten hingegen stehen quasi "irgendwo im Programmcode".
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:14
Zitat von Blup:
Sie werden im Programm genauso behandelt, ...
Nicht ganz. Eine Konstante wird an jede Verwendungsstelle kopiert. Gleiche Texte sind also mehrfach in der Exe vorhanden (Jedenfalls macht es D6 so).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#8

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:16
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
Delphi-Referenz durchsuchenLoadString

[edit]
Zitat:
Nicht ganz. Eine Konstante wird an jede Verwendungsstelle kopiert. Gleiche Texte sind also mehrfach in der Exe vorhanden (Jedenfalls macht es D6 so).
eigentlich versucht Delphi bei "langen Strings" und wenn sie als AnsiString, WideString, PChar usw. eingesetzt werden diese nur einmal in die EXE einzubinden und trägt überall nur einen Zeiger auf den gemeinsamen String ... zumindestens ist es in neueren Delphis so (ich glaub mein D7 macht es auch so)
Miniaturansicht angehängter Grafiken
unbenannt_487.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Resourcestring vs. const

  Alt 15. Sep 2009, 17:29
Zitat von Bernhard Geyer:
Zitat von Blup:
Sie werden im Programm genauso behandelt, ...
Nicht ganz. Eine Konstante wird an jede Verwendungsstelle kopiert. Gleiche Texte sind also mehrfach in der Exe vorhanden (Jedenfalls macht es D6 so).
Klar erzeugt der Compiler unterschiedlichen Code. Die Aussage bezieht sich auf die Benutzung der Konstanten.
Delphi-Quellcode:
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;
Delphi 2007 sagt: Adresse ist gleich
Ich glaube der Delphi-Compiler macht das schon immer so.
  Mit Zitat antworten Zitat
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Resourcestring vs. const

  Alt 16. Sep 2009, 08:48
Zitat von HeikoAdams:
Zitat von Highttower:
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?
Nein, ressourcestrings sind zwar String-Konstanten, sie werden aber anders gespeichert als normale Konstanten, damit man z.B. Anwendungen einfacher in andere Sprachen übersetzen kann, ohne jedesmal den kompletten Sourcecode anfassen und neu compilieren zu müssen. Im besten Fall brauch man mit Ressourcestrings nur eine einzelne Datei austauschen, um eine Anwendung z.B. von Englisch nach Französisch zu übersetzen.
Und wie macht man das, mit dem ändern ohne neu zu kompiliren? Die Exe mit nem Texteditor aufmachen und dann nach Resourcestrings suchen? - Vermutlich nicht.
Oder meinst du das nach dem Kompiliern, vor dem Linken? Also irgendwo in den Objektdateien, wenn es sowas bei Delphi noch gibt?
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.
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