Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variablen in Service verlieren ihren Wert (COM Server) (https://www.delphipraxis.net/79660-variablen-service-verlieren-ihren-wert-com-server.html)

JonnyGuitar 26. Okt 2006 09:21


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

shmia 26. Okt 2006 09:46

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:
   RegisterActiveObject(Self, CLASS_DeineCoClass, ACTIVEOBJECT_WEAK, FActiveObjectHandle);
selbst in der ROT registrieren und am Ende mit
Delphi-Quellcode:
   RevokeActiveObject(FActiveObjectHandle, nil);
selbst von der ROT entfernen.

JonnyGuitar 26. Okt 2006 09:50

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

shmia 26. Okt 2006 10:13

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.

JonnyGuitar 26. Okt 2006 10:19

Re: Variablen in Service verlieren ihren Wert (COM Server)
 
das habe ich auch schon probiert jedoch ohne erfolg:

Delphi-Quellcode:
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;
also intface bleibt immer nil. heisst das, dass das COM object nicht richtig registriert ist?
hat man denn nach dem erstellen des servers automatisch schon eine instanz?


mfg Jonny

shmia 26. Okt 2006 10:27

Re: Variablen in Service verlieren ihren Wert (COM Server)
 
Zitat:

Zitat von JonnyGuitar
hat man denn nach dem erstellen des servers automatisch schon eine instanz?

Nein. Das scheint mir der Knackpunkt zu sein.
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.

JonnyGuitar 26. Okt 2006 11:04

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

JonnyGuitar 26. Okt 2006 12:06

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

JonnyGuitar 26. Okt 2006 13:18

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 06:20 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