![]() |
Variablen in Service verlieren ihren Wert (COM Server)
moin zusammen,
endlich habe ich es geschafft, dass meine anwendung reibungslos mit meinem service über COM kommunizieren kann :) DACHTE ICH :( der service ist der COM-server. ich habe jetzt folgendes problem. wenn ich aus einer funktion des comservers eine globale variable des services setze so verliert diese sofort wieder ihren wert. das heisst ich setze test := true udn im nächsten moment in der main unit des services hat sie wieder den wert false. zwischen 2 "normalen" anwendungen klappt diese art der kommunikation wunderbar, aber beim service scheinen andere regeln zu gelten :( weiss einer rat, ich werde hier noch bekloppt. habe auch das buch com/dcom vom herrn kosch hier zur hand, finde dort aber auch keine lösungen. mfg Jonny |
Re: Variablen in Service verlieren ihren Wert (COM Server)
Hast du auch die ROT (=Running object table) benutzt?
Dein COM-Objekt sollte sich mit
Delphi-Quellcode:
selbst in der ROT registrieren und am Ende mit
RegisterActiveObject(Self, CLASS_DeineCoClass, ACTIVEOBJECT_WEAK, FActiveObjectHandle);
Delphi-Quellcode:
selbst von der ROT entfernen.
RevokeActiveObject(FActiveObjectHandle, nil);
|
Re: Variablen in Service verlieren ihren Wert (COM Server)
hi,
ich habe mein com objekt genauso registriert wie du es beschrieben hast und wie auch in dem buch geschildert. wenn ich von meinem client aus auf einen funktion des servers zugreife funktioniert das auch wunderbar, nur jede variable, global deklariert in der main unit des service, die ich setze bzw. verändere nimmt den wert nicht an. ich habe auch schon versucht aus der funktion des com servers eine funktion im service aufzurufen, klappt auch hervorragend, nur nimmt dann die globale variable auch nur kurzzeitig den wert an, verliert ihn aber sofort wieder. mfg Jonny |
Re: Variablen in Service verlieren ihren Wert (COM Server)
Dein Client sollte dann aber nur die Funktion GetActiveOleObject() benützen.
Wenn GetActiveOleObject() eine Exception wirft, bedeutet das, dass dein Service nicht läuft. Üblicherweise wird dann CreateOleObject() verwendet, um das Objekt zu erzeugen. Das darf in deinem Fall aber nicht geschehen. Ansonsten würde ich dir empfehlen, gezielt Meldungen mit OutputDebugString auszugeben. Speziell das Erzeugen, Zerstören deines COM-Objekts, sowie einige Get/Set-Methoden sollten so ausgestattet werden. Wenn due deinen Client in der IDE laufen lässt, kannst du mit Strg+Alt+V das Ereignisprotokoll anzeigen. |
Re: Variablen in Service verlieren ihren Wert (COM Server)
das habe ich auch schon probiert jedoch ohne erfolg:
Delphi-Quellcode:
also intface bleibt immer nil. heisst das, dass das COM object nicht richtig registriert ist?
procedure TForm1.btn2Click(Sender: TObject);
var IntFace: IUnknown; Test: IMopTestObj; begin GetActiveObject(CLASS_MopTestObj, nil, IntFace); if assigned(IntFace) then begin Test := INtFace as IMopTestObj; Test.ForUPD; end else begin Test := CoMopTestObj.Create; Test.ForUPD; end; end; hat man denn nach dem erstellen des servers automatisch schon eine instanz? mfg Jonny |
Re: Variablen in Service verlieren ihren Wert (COM Server)
Zitat:
Du musst selbst im Service dafür sorgen, dass eine Instanz des COM-Objekts erzeugt wird und diese in einer globalen Variable (Daten IUnknown oder davon abgeleitet) speichern. Damit lebt das Objekt so lange der Service läuft und ist natürlich auch in der ROT registriert. |
Re: Variablen in Service verlieren ihren Wert (COM Server)
also ich habe jetzt im execute des services eine instanz mit Test := CoMopTestObj.Create; erzeugt, leider findet er das trotzdem nicht :(
mfg Jonny |
Re: Variablen in Service verlieren ihren Wert (COM Server)
noch ein kleiner nachtrag,
zwischen 2 anwendung funktioniert die vorgehensweise, ich finde eine auf dem server erstellte instanz. es scheint also doch am service selber zu liegen. mfg Jonny |
Re: Variablen in Service verlieren ihren Wert (COM Server)
noch ein nachtrag :),
ich habe gerade in dem buch vom kosch den ROT VIEW gefunden. erzeuge ich ein com object in einer anwendung so wird es in diesem viewer angezeigt, erzeuge ich es im service wird nichts angezeigt mfg Jonny |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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