Autor Beitrag
Apo95
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 129

Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
BeitragVerfasst: So 16.02.14 01:35 
Hallo,

ich habe versucht, ein altes Delphi6-Projekt unter XE5 zu kompilieren; allerdings werden dort fast alle Methoden, die unter Delphi 6 noch in Ordnung waren, als fehlerhaft dargestellt.

Anbei die fehlerhaften Methoden :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function IsNetworkConnected: Boolean;        
begin 
  if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then 
    Result := True        
  else 
    Result := False; 
end;


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
// IP-Adresse
function GetIpAddressByName(const Lines: TStrings; const AHost: String)
  : Boolean;
type
  PPInAddr = ^PInAddr;
var
  WSA: TWSAData;
  HostInfo: PHostEnt;
  Addr: PPInAddr;
begin
  Result := false;
  if WSAStartUp($101, WSA) = 0 then
  begin
    try
      HostInfo := getHostByName(PChar(AHost));
      Result := HostInfo <> nil;
      if Result then
      begin
        Addr := Pointer(HostInfo^.h_addr_list);
        if (Addr <> nilAND (Addr^ <> nilthen
        begin
          Repeat
            Lines.add(StrPas(inet_ntoa(Addr^^)));
            inc(Addr);
          Until Addr^ = nil;
        end;
      end;
    finally
      WSACleanup;
    end;
  end;
end;


und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
// IP-Adresse (Ersatzmethode)
function GetIPFromHost(const HostName: string): string;
type
  TaPInAddr = array [0 .. 10of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  i: Integer;
  GInitData: TWSAData;
begin
  WSAStartUp($101, GInitData);
  Result := '';
  phe := getHostByName(PChar(HostName));
  if phe = nil then
    Exit;
  pptr := PaPInAddr(phe^.h_addr_list);
  i := 0;
  while pptr^[i] <> nil do
  begin
    Result := inet_ntoa(pptr^[i]^);
    inc(i);
  end;
  WSACleanup;
end;


Kann es sein, dass sich die Sprache deutlich verändert hat?? Ich meine, dass gewisse Befehle veraltet sind, ist normal; dies kann die Fehler wohl kaum erklären... .

Ich könnte darüber Informationen brauchen.

LG,

Apo95

_________________
Lette-Verein MIA
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 16.02.14 02:12 
Du hast leider vergessen dazuzuschreiben was für Fehler kommen...

Abgesehen davon, dass es keinen Sinn macht das so umständlich zu schreiben funktioniert dein IsNetworkConnected problemlos bei mir mit XE5. Besser:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function IsNetworkConnected: Boolean;
begin
  Result := GetSystemMetrics(SM_NETWORK) and $01 > 0;
end;

Und zu den anderen beiden Funktionen: Da reicht es doch sich anzuschauen was für ein Parameter erwartet wird und mit dem zu vergleichen was man angibt... steht doch deutlich da:
Zitat:
[dcc32 Fehler] Unit62.pas(39): E2010 Inkompatible Typen: 'PAnsiChar' und 'PWideChar'

Also castet man das halt auch auf den richtigen Typ:
ausblenden Delphi-Quelltext
1:
GetHostByName(PAnsiChar(AnsiString(HostName)));					

Das liegt einfach daran, dass Delphi nun Unicode kann und PChar nun PWideChar statt wie früher PAnsiChar ist. Es ist eben ein Metaty. (Ja, ich weiß, für Integer galt das auch mal, aber bei PChar wurde die Doku zumindest richtig umgesetzt.)

Für diesen Beitrag haben gedankt: Apo95
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: So 16.02.14 02:43 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function IsNetworkConnected: Boolean;
begin
  Result := GetSystemMetrics(SM_NETWORK) and $01 > 0;
end;


Oha, das funktioniert ? Nicht das der Compiler wegen Operator-Rangfolge folgendes draus compiliert:
ausblenden Delphi-Quelltext
1:
Result := GetSystemMetrics(SM_NETWORK) and ($01 > 0);					

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: Apo95
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: So 16.02.14 02:47