Einzelnen Beitrag anzeigen

Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Exception.CreateRes

  Alt 7. Apr 2011, 08:22
Erstmal gar keinen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Exception.CreateRes(@SOpenFileTitle);
  Exception.Create(SOpenFileTitle);
end;
Was CreateRes macht, kann man ja einfach nachschauen:
Delphi-Quellcode:
constructor Exception.CreateRes(ResStringRec: PResStringRec);
begin
  FMessage := LoadResString(ResStringRec);
end;
Es ruft LoadResString auf. Um zu sehen was passiert, wenn man die zweite Variante nutzt, gucken wir uns den erzeugten Assembler-Code an:
Code:
Unit1.pas.29: Exception.Create(SOpenFileTitle);
00464835 8D55FC          lea edx,[ebp-$04]
00464838 A1407A4600       mov eax,[$00467a40]
0046483D E8222DFAFF      call LoadResString // Oho, schon wieder LoadResString ;)
00464842 8B4DFC          mov ecx,[ebp-$04]
00464845 B201             mov dl,$01
00464847 A1308E4000       mov eax,[$00408e30]
0046484C E84BA4FAFF      call Exception.Create
Beide nutzen also LoadResString, um den String zu laden. CreateRes ist jedoch überladen, so dass man es auch mit einer ID aufrufen kann.
Warum jetzt vornehmlich CreateRes aufgerufen wird, weiß ich aber erst mal auch nicht. Kann mir nur vorstellen, dass es in der Zukunft dort einen Unterschied geben könnte und man es deshalb schon jetzt so aufruft.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat