AGB  ·  Datenschutz  ·  Impressum  







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

Com Server

Ein Thema von hanspeter · begonnen am 5. Mai 2008 · letzter Beitrag vom 26. Mai 2008
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Com Server

  Alt 5. Mai 2008, 08:28
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#2

Re: Com Server

  Alt 5. Mai 2008, 08:59
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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Com Server

  Alt 5. Mai 2008, 09:06
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: http://www.michael-puff.de/Developer/Delphi/Tutorials/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Com Server

  Alt 5. Mai 2008, 09:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Com Server

  Alt 5. Mai 2008, 10:02
Die DLL hätte auch den Vorteil, dass die Anwendung ohne Installation läuft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#6

Re: Com Server

  Alt 5. Mai 2008, 10:05
Zitat von Luckie:
Die DLL hätte auch den Vorteil, dass die Anwendung ohne Installation läuft.
Abgesehen von einem "regservr32" Aufruf?

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Com Server

  Alt 5. Mai 2008, 10:06
Nö eben nicht. Ist ja eine normale DLL und kein COM-Server mehr.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#8

Re: Com Server

  Alt 5. Mai 2008, 10:12
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
Oliver
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Com Server

  Alt 5. Mai 2008, 10:22
Zitat von Sherlock:
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
Ja das ist der Reportgenerator des Projektes.
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Com Server

  Alt 26. Mai 2008, 09:03
Zitat von Luckie:
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: http://www.michael-puff.de/Developer/Delphi/Tutorials/
Da ich mit Com-Server noch nicht die große Erfahrung habe, möchte ich nochmals nachfragen.

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
  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 13:31 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