delphi 中的常量 INADDR_NONE
constant INADDR_NONE in delphi
这是我的代码示例:
Result.S_addr := inet_addr(PAnsiChar(AnsiString(Address)));
if Result.S_addr = INADDR_NONE then
begin
// codigo;
end;
'Result.S_addr' return -1 因为 'Address' 是一个 url。 INADDR_NONE 是一个常数,在 WINAPI 中定义为 'DWORD($FFFFFFFF)'。
理论上应该进入IF语句,但是INADDR_NONE取值4294967295(十进制)所以永远不会进入IF语句。
为什么要取那个值?以及如何使常数取适当的值?
谢谢大家。
PD:我正在使用 RAD Studio 10
问题出在 Winsock 中的声明之一。
S_addr
被声明为 u_long
,但不幸的是,u_long
被定义为有符号 Longint
而不是无符号 Longword
。所以你应该投:
if Result.S_addr = u_long(INADDR_NONE) then
begin
...
end;
这是我的代码示例:
Result.S_addr := inet_addr(PAnsiChar(AnsiString(Address)));
if Result.S_addr = INADDR_NONE then
begin
// codigo;
end;
'Result.S_addr' return -1 因为 'Address' 是一个 url。 INADDR_NONE 是一个常数,在 WINAPI 中定义为 'DWORD($FFFFFFFF)'。 理论上应该进入IF语句,但是INADDR_NONE取值4294967295(十进制)所以永远不会进入IF语句。 为什么要取那个值?以及如何使常数取适当的值?
谢谢大家。
PD:我正在使用 RAD Studio 10
问题出在 Winsock 中的声明之一。
S_addr
被声明为 u_long
,但不幸的是,u_long
被定义为有符号 Longint
而不是无符号 Longword
。所以你应该投:
if Result.S_addr = u_long(INADDR_NONE) then
begin
...
end;