AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Variablen in Service verlieren ihren Wert (COM Server)
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen in Service verlieren ihren Wert (COM Server)

Ein Thema von JonnyGuitar · begonnen am 26. Okt 2006 · letzter Beitrag vom 26. Okt 2006
Antwort Antwort
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#1

Variablen in Service verlieren ihren Wert (COM Server)

  Alt 26. Okt 2006, 10:21
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

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

  Alt 26. Okt 2006, 10:46
Hast du auch die ROT (=Running object table) benutzt?
Dein COM-Objekt sollte sich mit
   RegisterActiveObject(Self, CLASS_DeineCoClass, ACTIVEOBJECT_WEAK, FActiveObjectHandle); selbst in der ROT registrieren und am Ende mit
   RevokeActiveObject(FActiveObjectHandle, nil); selbst von der ROT entfernen.
Andreas
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#3

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

  Alt 26. Okt 2006, 10:50
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

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

  Alt 26. Okt 2006, 11:13
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.
Andreas
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#5

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

  Alt 26. Okt 2006, 11:19
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

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

  Alt 26. Okt 2006, 11:27
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.
Andreas
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#7

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

  Alt 26. Okt 2006, 12:04
also ich habe jetzt im execute des services eine instanz mit Test := CoMopTestObj.Create; erzeugt, leider findet er das trotzdem nicht


mfg Jonny
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#8

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

  Alt 26. Okt 2006, 13:06
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#9

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

  Alt 26. Okt 2006, 14:18
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
the only thing to fear is runnin' out of beer
  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 06:24 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