Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Gültigkeit von Com Handles

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
17.11.2003, 16:47 Uhr
virtual
Sexiest Bit alive
(Operator)


Wir haben eine eigene Scriptsprache geschrieben, die u.a. auch COM Objekte instantiiert. So kann man - ähnlich wie in VB - zB Word aus dem Script heraus öffnen und allerlei Sachen damit machen.

Nach der reinen COM Lehre sollte es IMHO so sein, daß ein COM Objekt garantiert solange lebt, bis die Letzte Referenz auf selbiges gelöscht wurde. Leider scheint dem ja nicht so zu sein, weil wenn ich mir zB Word mit Hilfe von COM öffne und dann der Benutzer das Fenster durch Klicken des Close-Buttons schließt (also letztlich die Quit-Methode des COM Objekts aufruft), dann ists weg.

Noch doofer ist das deshalb, weil der Scriptinterpreter das natürlich nicht mitbekommt: Das Interface wird dem Interpreter also einfach unter der Nase geklaut. Nun suche ich eine Möglichkeit, aus dem Script heraus zu bestimmen, ob ein COM Objekt noch gültig ist. Nur wie macht man das?

Derzeit handel ich nur mit IDispatch -Interfaces (ist ja logische Wahl für einen Interpreter), und rufe einfach über die Invoke Methode Invoke selbst ohne jeglichen Parmeter auf. Leider hat diese Vorgehensweise Lücken, funktioniert also nicht bei allen Objekten (bei manchen aber sehr zuverlässig!).

Hat Bill vielleicht eine Möglichkeit vorgesehen, mit der man herausbekommt, ob ein COM Objekt noch lebt?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.11.2003, 17:45 Uhr
0xdeadbeef
Gott
(Operator)


Bill benutzt einen Garbage-Collector auf Basis von Referenzzählung. Allerdings zählt er die Referenzen nicht automatisch selbst (wäre in C++ auch etwas schwierig), sondern erwartet von dir, dass du das selbst machst. Deswegen hat das IDispatch-Interface zwei Methoden: AddRef erhöht den Referenzzähler um eins und Release senkt ihn um eins. Wenn der Referenzzähler auf Null sinkt, wird das Objekt zerstört.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.11.2003, 18:13 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, das habe ich ja gemerkt. Die Frage ist halt einfach: Ich starte aus einem Program ein COM Objekt. Dieses wird ausserhalb des Programms gelöscht. Wie kann das Programm nun mitbekommen, daß das COM Objekt nicht mehr gültig ist?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.11.2003, 18:49 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm
vielleicht addref aufrufen und den returnvalue anschauen. Wenn der io ist dann wieder einmal releasen und man hat die info
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.11.2003, 20:06 Uhr
virtual
Sexiest Bit alive
(Operator)


Gemäß Docu isr der Rückgabewert von AddRef nicht verläßlich.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.11.2003, 20:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zumindest ist das das erste mal das du ne frage in dem forum stellst die ich verstehe auch wenn ich leider nicht die lösung weiss. Vielleicht finde ich ja noch was
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.11.2003, 20:43 Uhr
virtual
Sexiest Bit alive
(Operator)


@Windalf:

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.11.2003, 20:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ist der rofl für den ersten, den zweiten oder beide sätze?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.11.2003, 20:53 Uhr
virtual
Sexiest Bit alive
(Operator)


Für den ersten Halbsatz. Das hörte sich irgendwie ein wenig erleichtert an, fand ich. So nach der Devise: "Na, endlich weiß virtual auch mal nicht mehr weiter!" - Das kommt aber häufiger vor, als Du Dir wahrscheinlich vorstellst. (nur hab ich eben schon Internet 1.1 installiert und von daher zugriff auf Google, was ca 95% meiner Fragen beantwortet ).
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.11.2003, 21:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das war weniger "endlich weiß virtual auch mal nicht weiter" als das ich halt überhaupt mal ne frage verstanden habe die du gestellt hast. Wenn du sonst ne Frage reinschreibst postet mir mike die immer und hängt am ende ran "Ich versteh kein wort, Du?"
Und diesmal war es endlich mal anders....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: