Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi W1022 Der Vergleich ergibt immer True (https://www.delphipraxis.net/153145-w1022-der-vergleich-ergibt-immer-true.html)

luke2 22. Jul 2010 15:51

Delphi-Version: 2010

W1022 Der Vergleich ergibt immer True
 
Hi,

Ich habe folgende Funktion:
Delphi-Quellcode:
function IsValidIP (const aIP: string): Boolean;
begin
  Result := ((aIP <> '') and (inet_addr(PansiChar(ansistring(aIP))) <> INADDR_NONE));
end;
Unter Delphi2010 kommt die Meldung W1022 Der Vergleich ergibt immer True, unter Delphi2007 kommt sie nicht. Wenn ich INADDR_NONE durch -1 ersetze, verschwindet die Meldung.
Kann mir jemand sagen woran das liegt?

himitsu 22. Jul 2010 16:22

AW: W1022 Der Vergleich ergibt immer True
 
Delphi-Quellcode:
const INADDR_NONE = DWORD($FFFFFFFF);

type u_long = Longint;
function inet_addr(cp: PAnsiChar): u_long; stdcall;
Da war mal wieder irgend ein Idiot (oder doofes Übersetzungscript) am Werk:
u_long = unsigned Long = LongWord

DWORD(-1), also 4.294.967.295 kann niemals in LongInt reinpassen, und demnach ist ein Vergleich auf <> immer true.

Aber sowas hätte man auch selber schnell rausbekommen können, wenn man sich die Typen mal ansieht.

Delphi-Quellcode:
function IsValidIP(const aIP: AnsiString): Boolean;
begin
  Result := (aIP <> '') and (LongWord(inet_addr(PAnsiChar(aIP))) <> INADDR_NONE);
end;
oder
Delphi-Quellcode:
function IsValidIP(const aIP: AnsiString): Boolean;
begin
  Result := (aIP <> '') and (inet_addr(PAnsiChar(aIP)) <> LongInt(INADDR_NONE));
end;

luke2 22. Jul 2010 16:45

AW: W1022 Der Vergleich ergibt immer True
 
super Danke :wink: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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