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.