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.