Entwickler-Ecke
Programmierwerkzeuge - Delphi 6 nach XE migrieren
Apo95 - So 16.02.14 01:35
Titel: Delphi 6 nach XE migrieren
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 :
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; |
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:
| 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 <> nil) AND (Addr^ <> nil) then begin Repeat Lines.add(StrPas(inet_ntoa(Addr^^))); inc(Addr); Until Addr^ = nil; end; end; finally WSACleanup; end; end; end; |
und
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:
| function GetIPFromHost(const HostName: string): string; type TaPInAddr = array [0 .. 10] of 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
jaenicke - 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:
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:
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.)
OlafSt - So 16.02.14 02:43
jaenicke hat folgendes geschrieben : |
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:
Delphi-Quelltext
1:
| Result := GetSystemMetrics(SM_NETWORK) and ($01 > 0); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!