Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi TXMLDocument.SaveToStream speichert nicht (https://www.delphipraxis.net/92739-txmldocument-savetostream-speichert-nicht.html)

trashcandesign 25. Mai 2007 08:01


TXMLDocument.SaveToStream speichert nicht
 
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

Delphi-Quellcode:
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:

Delphi-Quellcode:
NodeLevel2.Attributes['IpAddress'] := '192.168.1.1';
wird alles einwandfrei zugewiesen/gespeichert.

Warum? :gruebel:
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.

Udontknow 25. Mai 2007 15:02

Re: TXMLDocument.SaveToStream speichert nicht
 
Hallo!

Wo initialisierst du denn Result? Du erstellst nirgendwo einen Memorystream, folglich ist ein Aufruf von SaveToStream(Result) auch böse und dürfte in vielen Fällen mit AVs enden...

Cu,
Udontknow


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz