Es scheint einfacher zu sein, ist aber eher unsauber. Du holst dir ziemlich viel Overhead in dein Programm, nur um die
IP-Adresse auszulesen?
Wenn man es so genau nimmt hast du natürlich Recht, dass man sich eine große
Unit dadurch einbindet welche man nicht im vollen Funktionsumfang ausschöpft.
Dann gibt es die Methode sich einfach aus der
Unit die Function zu ziehen bzw "abzuschreiben", so dass diese auch außerhalb der
Unit funktioniert (In diesem Falle die Sockets
Unit) oder man schreibt es gleich selbst.
Durch die
Unit hätte man aber gleich seinen "Anhaltspunkt, wie was funktioniert".
Als Beispiel für diesen Fall:
Delphi-Quellcode:
function TIpSocket.LocalHostAddr: TSocketHost;
begin
Result := LookupHostAddr(LocalHostName);
end;
Wobei wir dann zu folgendem kommen
Delphi-Quellcode:
function TIpSocket.LookupHostAddr(const hn: string): TSocketHost;
var
h: PHostEnt;
begin
Result := '';
if hn <> '' then
begin
if hn[1] in ['0'..'9'] then
begin
if inet_addr(pchar(hn)) <> INADDR_NONE then
Result := hn;
end
else
begin
h := gethostbyname(pchar(hn));
if h <> nil then
with h^ do
Result := format('%d.%d.%d.%d', [ord(h_addr^[0]), ord(h_addr^[1]),
ord(h_addr^[2]), ord(h_addr^[3])]);
end;
end
else Result := '0.0.0.0';
end;
Ich finde es ist eine wunderbare Methode um sich Funktionen zu stibitzen ohne viel Aufwand
(Selbst wenn man nicht die ganze
Unit einbinden will aus deinen o.g. Gründen)
Hat mir im "täglichem Betrieb" oft geholfen.