AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML und Streams. Bin ich zu blöd?
Thema durchsuchen
Ansicht
Themen-Optionen

MSXML und Streams. Bin ich zu blöd?

Ein Thema von Henryk · begonnen am 18. Feb 2007 · letzter Beitrag vom 18. Feb 2007
Antwort Antwort
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#1

MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 18:29
Hallo,

ich hab einigen Beispielcode im Netz gefunden, der aber bei mir einfach nicht kompiliert werden kann.

Delphi-Quellcode:
procedure Test(const Stream: TStream);
var
  Adapter: IStream;
  XMLDoc: IXMLDomDocument;
begin
  XMLDoc := CoDOMDocument.Create();

  // Fehler in dieser Zeile aus den Beispielen:
  // TStreamAdapter und IStream sind nicht kompatibel
  Adapter := TStreamAdapter.Create(Stream, soReference);

  // Fehler in dieser Zeile aus den Beispielen:
  // OleVariant und IStream sind nicht kompatibel
  XMLDoc.load(Adapter);

  usw.
Was mache ich falsch? Bei den Beispielen scheint es ja zu funktionieren?

Grüsse

Henryk
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:08
Welcher Fehler meldet der Compiler als Grund?
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:26
Hallo Markus,

er meldet, dass TStreamAdapter und IStream nicht kompatibel sind.

So geht es:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  fs: TFileStream;
  dom: IXMLDOMDocument2;
begin
  dom := CoDomDocument.Create;
  dom.async := False;
  fs := TFileStream.Create(ParamStr(1), fmOpenRead or fmShareDenyWrite);
  if dom.load(TStreamAdapter.Create(fs, soReference) as IStream)
    then ShowMessage(dom.xml)
    else ShowMessage(dom.parseError.reason);
  fs.Free;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:40
Hallo Achim,
ich habe mir den Code nicht angeschaut. Ich bin halt der Meinung, daß der Fragesteller die geanue Fehlermeldung angibt wenn er Hilfe erwartet.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:50
Ich hatte die Fehlermeldung nicht reproduziert, sondern lediglich zitiert - allerdings ohne das Zitat als solches kenntlich zu machen:

Zitat von Henryk:
Delphi-Quellcode:
// ...
// Fehler in dieser Zeile aus den Beispielen:
// TStreamAdapter und IStream sind nicht kompatibel
Adapter := TStreamAdapter.Create(Stream, soReference);
// ...
Freundliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:54
Das habe ich nicht gesehen.
Markus Kinzler
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#7

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 19:55
Hallo Achim,

was muss ich denn einbinden, damit mein Delphi D2005 den Typen IXMLDOMDocument2 kennt? Ich hab diesen Typen nirgendwo gefunden. Kopier ich dein Beispiel in meine WIN32-Anwendung und ersetze IXMLDOMDocument2 durch IXMLDOMDocument, bekomme ich trotzdem wieder den gleichen Fehler, dass IStream und TStreamAdapter nicht kompatibel sind.

Für IStream binde ich die Unit Ole2 ein.


Zitat von marabu:
Hallo Markus,

er meldet, dass TStreamAdapter und IStream nicht kompatibel sind.

So geht es:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  fs: TFileStream;
  dom: IXMLDOMDocument2;
begin
  dom := CoDomDocument.Create;
  dom.async := False;
  fs := TFileStream.Create(ParamStr(1), fmOpenRead or fmShareDenyWrite);
  if dom.load(TStreamAdapter.Create(fs, soReference) as IStream)
    then ShowMessage(dom.xml)
    else ShowMessage(dom.parseError.reason);
  fs.Free;
end;
Freundliche Grüße
Ich hatte zwischendurch auch weiter probiert und so geht es
Delphi-Quellcode:
...
  StringStream := TStringStream.Create('');
  XMLDoc := CoDOMDocument.Create();

  try
    StringStream.CopyFrom(Stream, Stream.Size);
    XMLDoc.loadXML(StringStream.DataString);
...
Nur dieses sinnlose StringStream.CopyFrom gefällt mir aus Effizienzgründen nicht.

Grüsse

Henryk
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: MSXML und Streams. Bin ich zu blöd?

  Alt 18. Feb 2007, 21:20
Hallo Henryk,

ich habe mit D7 getestet und die Units ActiveX und MSXML2 eingebunden.

Gute Nacht
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:35 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