![]() |
Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Hallo zusammen,
ich würde gerne über einen Windows System Dienst ein XML File erstellen - leider bleibt er schon beim CreateOleObject hängen:
Delphi-Quellcode:
doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
Ich hatte die Tage schon mal ein ähnliches Problem ( ![]() Leider helfen die Lösungen von dort hier nicht weiter...
Delphi-Quellcode:
In einer normalen Application funzt der Code einwandfrei - was muss man für einen Dienst ergänzen damit man das OLEObject erzeugen kann?!?
OleInitialize(nil);
Application.Initialize; Bin für jeden Tipp dankbar!!! |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
-Welchen Fehler meldet er?
-Schon mit einem anderern XML-Parser versucht? |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Hallo lorrey,
Zitat:
Gruß |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Zitat:
muss man vielleicht eine bestimmte reihenfolge einhalten? |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Zitat:
Andere Frage: Warum late binding? Hast du schon mal versucht, die Typbibliothek zu importieren und das Objekt anschließend über die ClassFactory zu erstellen? Und eine ganz dumme Frage: Auf der Maschine, auf welcher der Parser laufen soll, sind aber schon die MS XML Core Services installiert, oder? ;-) Noch eine Möglichkeit: Probier mal mit "msxml" statt mit "Microsoft.XMLDOM" zu erzeugen. Mehr Ideen habe ich im moment nicht. Gruß |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
du must das com in den workerthread initalisieren.
dienste sind threads! |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
hmmm
also mit es klappt mit beiden bei meine ADO DB Connection - nur beim XML net?
Delphi-Quellcode:
Ist doch vom Prinzip her ähnlich oder bin ich jetzt ganz verpeilt?!?
CoInitialize(nil);
ODER CoInitializeEx(nil, COINIT_APARTMENTTHREADED); Auch der Einsatz von 'msxml' ändert leider nichts. Ich mach die Initialisierung in der 'ServiceExecute' - wie gesagt dem ADO reicht das, ohne geht auch er nicht... nur die XML Sache will nicht... Mache ich irgendwas Grundlegend falsch?!? |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Bist du unbedingt auf diesen XML-Parser angewiesen oder tuts auch eine anderer?
|
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Das ist mir völlig egal welcher - bin auf diesen über das Tutorial hier gekommen:
![]() Der funtz auch super, nur in meinem Dienst bekomme ich ihn nicht zu laufen! Aber das muss doch irgendwie gehen, oder? Falls es Alternativen gibt, die in Diensten laufen - als her damit ;-) Mein Ziel ist es eine DB Tabelle in ein XML File zu exportieren... |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Falls es igrendwie hilft -> die Ausgabe von
Delphi-Quellcode:
bringt mir eine Zugriffverletzung... !?!
except
on e:Exception do Showmessage(e.message); Wo kommt die denn her? |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Sorry will hier echt nich rum spammen ;-)
Hab gerade noch was getestet:
Delphi-Quellcode:
GEHT!
WordApp:=CreateOleObject('Word.Application');
Delphi-Quellcode:
Geht NICHT !
doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;
Igrendwo fehlen doch da die "Basics", oder?!? |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Zitat:
Delphi-Quellcode:
Geht das?
var
vDoc: OLEVariant; begin vDoc := CreateOleObject('Microsoft.xmldom'); if not vDoc.loadXML('<root />') then raise Exception.Create('war wohl nix'); end; Gruß |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Das ist ja der Hammer - es GEHT !!!!!
Delphi-Quellcode:
damit ging es nicht!
doc : IXMLDOMDocument;
root, child, child1 : IXMLDomElement; text1, text2 : IXMLDOMText; nlist : IXMLDOMNodelist ABER mit Coding von Neuromancer und neuer Variablen Dekleration ging es dann!
Delphi-Quellcode:
Ich versteh zwar jetzt die Welt nicht mehr - aber egal hauptsache es geht erst mal ;-)
doc,
root, child, child1, text1, text2, nlist : OLEVariant; Kann mir einer Erklären warum die anderen Typen in einer "normalen" Anwendung gehen aber in einem Dienst nicht ?!? VIELEN DANK an ALLE für eure Hilfe!!! |
Re: Dienst / Service und CreateOleObject('Microsoft.XMLDOM')
Zitat:
Mein Verdacht war, dass die Variable tatsächlich vom Typ IXMLDOMDocument war. Wenn du aber late Binding benutzt (d.h. wenn du nicht auf die registrierte Typbibliothek zurückgreifst), dann muss das Interface IXMLDOMDocument ein duales Interface sein. Und höchstwahrscheinlich ist es das eben nicht. Deswegen ist es bei late binding immer geschickter, einen OLEVariant als Variable zu nehmen, weil dieser kann - soviel ich weiß - jeden beliebigen IUnknown aufnehmen. Der Cast auf IXMLDOMDocument kann aber gewaltig in die Hose gehen, wenn eben das Interface kein duales ist. Und bevor ich mich jetzt um Kopf und Kragen rede, höre ich besser auf....;) Sorry, aber es ist einfach schon zu lange her, dass ich damit zu tun hatte... Gruß PS: Wegen dem dualen Interface schaue ich mal kurz nach...nein...IXMLDOMDocument ist ein duales Interface....*hmmmm*....naja...vielleicht kann der eine oder andere COM-Hase noch etwas dazu sagen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz