Moin,
ein neuer Tag eine neue Frage zum TXMLDocument.
Ich habe folgende Funktion um ein
XML-Dokument zu erstellen und in einen Stream zu speichern:
Delphi-Quellcode:
function TMPConnection.MakeConnectionStream : TMemoryStream;
type
PPInAddr = ^PInAddr;
var
XMLDocument : TXMLDocument;
NodeLevel1, NodeLevel2 : IXMLNode;
WSA : TWSAData;
PHEn : PHostEnt;
Addr : PPInAddr;
begin
XMLDocument := TXMLDocument.Create(self);
WSAStartup( $0101, WSA );
PHEn := gethostbyname(
Nil );
//Wird für eigene IP gebraucht
Addr := Pointer(PHEn^.h_addr);
CoInitialize(
nil);
with XMLDocument
do
begin
Active := true;
Version := XML_VERSION;
Encoding := XML_ENCODING;
NodeLevel1 := AddChild('
mpprotocol');
NodeLevel1.Attributes['
version'] := PROTOCOL_VERSION;
NodeLevel1 := DocumentElement.AddChild('
request');
NodeLevel1.Attributes['
type'] := '
LOGIN';
NodeLevel2 := NodeLevel1.AddChild('
client');
NodeLevel2.Attributes['
IpAddress'] := StrPas(inet_ntoa(Addr^^));
NodeLevel2.Attributes['
Mode'] := '
Client';
SaveToStream(Result);
Active := False;
end;
CoUninitialize;
end;
Das Problem liegt in der Zeile
NodeLevel2.Attributes['IpAddress'] := (inet_ntoa(Addr^^));
Wenn ich das so aufrufe wird der Stream nicht in Result gespeichert.
Ändere ich das jedoch ab in einen festen String:
NodeLevel2.Attributes['IpAddress'] := '192.168.1.1';
wird alles einwandfrei zugewiesen/gespeichert.
Warum?
StrPas gibt mir doch auch einen String zurück, also warum funktioniert das so nicht??
NACHTRAG:
Wenn ich Result, oder einen übergebenen Parameter als Parameter für SaveToStream angebe wird es auch nicht gespeichert, wenn ich den String fest reinschreibe.
Nur wenn ich eine Stream-Variable deklariere funktioniert das.