Einzelnen Beitrag anzeigen

trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

TXMLDocument.SaveToStream speichert nicht

  Alt 25. Mai 2007, 08:01
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.
  Mit Zitat antworten Zitat