AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke IsHostAlive mit XE2 - Unklare Fehler / Warnungen
Thema durchsuchen
Ansicht
Themen-Optionen

IsHostAlive mit XE2 - Unklare Fehler / Warnungen

Ein Thema von Piro · begonnen am 12. Mär 2014 · letzter Beitrag vom 28. Feb 2015
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#2

AW: IsHostAlive mit XE2 - Unklare Fehler / Warnungen

  Alt 12. Mär 2014, 10:00
Wie ist INADDR_NONE deklariert?


Zitat:
Delphi-Quellcode:
function StringToPAnsiChar(stringVar : string) : PAnsiChar;
Var
  AnsString : AnsiString;
  InternalError : Boolean;
begin
  InternalError := false;
  Result := '';
  try
    if stringVar <> 'Then
    begin
       AnsString := AnsiString(StringVar);
       Result := PAnsiChar(PAnsiString(AnsString));
    end;
  Except
    InternalError := true;
  end;
end;
Was soll das InternalError darstellen?
Die Variable wird ja nie verwendet/ausgelesen.

Solange niemand bei stringVar das Speichernmanagement zerschießt, wird es dort auch niemals eine Exception geben.
OK, bei einem EOutOfMemory, aber so oder so ... dann ist eh alles zu spät.

Ein Zeiger auf den Speicher der lokalen Variable?
Diese Variable wird bei Prozedurende freigegeben und demnach enthält dann auch das Result einen ungültigen Zeiger.

Den AnsiString einfach so in einen PAnsiString zu casten ist garantiert auch total falsch.
Aber ermutlich wolltest du das Result := PAnsiChar(Pointer(AnsString)); erreichen, also daß Delphi keine automatischen Konvertierungen bei AnsiString/PAnsiChar einbaut.


Entweder du machst Hostname direkt zu einem AnsiString (dessen Typ ändern),
oder halt nur temporär, aber dann so, daß die TempVariable lange genug überlebt.
Delphi-Quellcode:
gethostbyname(PAnsiChar(AnsiString(Hostname)));

// wird intern zu
AutomatischGenierierteAnsiStringVariable := AnsiString(Hostname);
gethostbyname(PAnsiChar(AutomatischGenierierteAnsiStringVariable));


Leider macht mir die Unit seit der Umstellung auf XE2 Pro Ärger und meine Computer und Server sind nie erreichbar.
Das Ganze war vorher noch ANSI? (vor D2009)

Zitat:
Delphi-Quellcode:
const
  SendBuffer: array[0..31] of char = 'pingpongpingpongpingpongpingpong'; // ja, das geht auch so
Also das CHAR war vorher ein AnsiChar?
Tja, dann stimmt dein Protokoll jetzt nicht mehr, denn jetzt ist es Unicode.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Mär 2014 um 10:11 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz