Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Unterschied Exception.Create und CreateRes

  Alt 1. Aug 2020, 16:46
raise EDECHashException.CreateRes(@sHashNoDefault);
(Dies compiliert übrigens nicht, wenn man in den Compiler-Optionen "Typed @ Parameter" einschaltet.)

raise EDECHashException.Creates(sHashNoDefault);
Die Frage habe ich vor kurzem auch in der englischsprachigen Delphi Praxis gestellt, wenn auch nicht für Create/CreateRes sondern CreateFmt/CreateFmtRes.

Der Unterschied liegt darin, dass der Ressource-String erst beim eigentlichen Zugriff aus den Ressourcen geladen wird.

Das führt zu einer anderen Behandlung bei der Übersetzung:

"Constant resourcestring references are resolved during initialization by System._InitResStrings.

If you change the application language after that, e.g. by calling LoadResourceModule, then these references will not be updated."
-- Anders Melander

D.h. bei Create(sRessourceString) wird der Ressource String einmalig bei Programmstart geladen (und dabei ggf. die Übersetzung verwendet). Falls der User (oder das Programm) später auf eine andere Sprache umschaltet, wirkt sich das auf diese Strings nicht mehr aus. Bei CreateRes(@sRessourceString) wird er erst beim Aufruf geladen, also in der jeweils zu diesem Zeitpunkt ausgewählten Sprache.
Thomas Mueller
  Mit Zitat antworten Zitat