![]() |
Com Server
Hallo,
ich habe für ein System alle Reportfunktionen in einen COM-Server ausgelagert. Das funktioniert wie gewünscht. Bei dem Zugriff von mehreren Programmen habe ich aber ein Problem. Der Zugriff erfolgt über Report := CoReport.Create; und die Freigabe über Report := nil; Ich starte Programm A und arbeite beliebig mit dem Comserver. Ich start Programm B. Das erzeugt ebenfalls eine Instanz des Com Servers und druckt. Ich beende Programm B und will in dem zwischendurch nicht geschlossenen Programm A weiterarbeiten. (A erhält wieder den Focus) Wenn ich jetzt den Comserver anspreche, erhalte ich eine Schutzverletzung. Der ComServer ist mit regsvr32 registriert. (Bei der Installation) (Vista 64) Was kann ich ändern? Gruß Peter |
Re: Com Server
Unter COM werden Objekte automatisch freigegeben, sobald sie aus dem Scope fallen.
Spar Dir mal das Free(Edit: Nil, meine ich), vielleicht reichts dann schon. Sherlock |
Re: Com Server
Du musst den COM-Server für mehrfach Zugriffe auslegen. Wenn ich mich richtig entsinne hängt das mit dem Apartment-Modell zusammen. Guck dir mal mein kleines Tutorial diesbezüglich an:
![]() |
Re: Com Server
Erst mal danke für die Tips.
Ich habe die TLB von Delphi 2007 generieren lassen und als Mode "Multi Threaded Apartments" verwendet. Dabei habe ich allerdings gemerkt, das der TLB Editor von D2007 reichlich buggig ist. Ursprünglich hatte ich den Server als Exe konzipiert. Das funktionierte unter XP problemlos, jedoch nicht unter Vista. Die Comserver Lösung habe ich gewählt, da ich aus mehreren dll (Hydra-Module) auf die Reportfunktionen zugreifen muss. Evenduell werde ich den Com-Server in eine normale Dll umbauen und mehrere Instanzen verwenden, dann dürfte der Effekt auch weg sein. Gruß Peter |
Re: Com Server
Die DLL hätte auch den Vorteil, dass die Anwendung ohne Installation läuft.
|
Re: Com Server
Zitat:
Sherlock |
Re: Com Server
Nö eben nicht. Ist ja eine normale DLL und kein COM-Server mehr.
|
Re: Com Server
Args, das hatte ich nicht begriffen. Komplett weg von COM und alles als DLL?
Das würde ich mir aber nochmal überlegen, es sei denn die DLL soll nur für eigenen Programme verwendet werden. Sherlock |
Re: Com Server
Zitat:
Den rufe ich nur aus eigenen Programmen auf. Allerdings von mehreren Programmen bzw. Programminstanzen. Den Weg über Com-Server hatte ich nur gewählt, um nicht in einer dll eine dll laden zu müssen und dann in jeder dll eine Instanz des Reportgenerators zu haben. Ich verwende zur Modularisierung das Hydra-Plugin. Das Projekt war vorher aus einem Guß, ich habe aber den Eindruck, dass ich mir mit der Modularisierung über dll mehr Probleme als Nutzen eingehandelt habe. Gruß Peter |
Re: Com Server
Zitat:
Ich habe den Server als "Multi Threaded Apartments" erzeugen lassen. Ein Zugriff von mehr als einer Programminstanz ist aber in meiner Lösung problembehaftet. Da der TLB Editor in D2007 reichlich buggig ist, vermute ich das hier eine andere Zugriffsvariante generiert wurde. Kann mir wer sagen wo im Modulaufruf/Parametern der Unterschied (Apartments/Multi Thread) liegt? Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 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