AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ActiveX-COM-Server automatisch beenden

Ein Thema von tgoessi · begonnen am 6. Jun 2005 · letzter Beitrag vom 6. Jun 2005
 
tgoessi

Registriert seit: 31. Mai 2005
34 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: ActiveX-COM-Server automatisch beenden

  Alt 6. Jun 2005, 14:10
Ich habe den Fehler gefunden. In der Destroy-Routine fehlte das Inherited.
Nun hab ich aber noch ein weiteres Problem:
In meinem Server muss ich eine Meldung an alle erzeugten Interfaces senden. Dazu erzeugte ich eine Interfaceliste, in welches jedes gestartete Interface sich einträgt:
Delphi-Quellcode:
procedure TDispenserData.Initialize;
begin
  if not assigned (DispenserInterfaces) then
    DispenserInterfaces := TInterfaceList.Create;
  DispenserInterfaces.Add(self as IDispenserTriggerEvents);
  inc(IntfCount);
end;
TDispenserData ist das Objekt, IDispenserData ist die externe AvticeX-Schnittstelle, IDispenserTriggerEvents ist eine interne private Schnittstelle, über die die Meldungen des Servers gesendet werden.
IntfCount ist ein interner Zähler, welche die Interfaces zählt.
In der Destroy-Routine steht dann:
Delphi-Quellcode:
procedure TDispenserData.Destroy;
begin
  DispenserInterfaces.Remove(self as IDispenserTriggerEvents);
  dec(IntfCount);
  if IntfCount = 0 then
    DispenserInterfaces.Free;
end;
Nun hab ich das Problem, dass mein Referenzzähler beim Speichern in der Interfaceliste auf 3 ansteigt. Beim Disconnect des Interfaces wird daher die Destroy-Routine nicht aufgerufen.
Wie kann ich dieses Problem lösen oder kann ich aus der Applikation heraus eine Interfaceliste erhalten, ohne eine eigene Interfaceliste erzeugen zu müssen?

Tom


Zitat von Bernhard Geyer:
Zitat von tgoessi:
Ich kann das DispControll nur mit Create allozieren.
Destroy gibt es nicht.
_Release soll man gem. Help nicht verwenden.
Wird das Form geschlossen, wird wohl auch das Interface geschlossen oder etwa nicht. Wie wird das Objekt dereferenziert?
Da der Referenzzähler eine Member deines Formulares ist (hoffe doch nicht das du es als globale Variable verwendest) wird es freigeben sobald das Formular freigegeben wird.
Du kann es aber früher freigeben, in dem Du die Variable auf nil setzt.
  Mit Zitat antworten Zitat
 


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 02:36 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 by Thomas Breitkreuz