![]() |
COM Object freigeben
Hallo,
Ich bin hier schon am verzweifeln und komme nicht weiter. Ich habe einen ComServer der über die Anwendung1 mit
Delphi-Quellcode:
erstellt bzw. gestartet wird, was auch so weit alle sganz gut klappt, aber ich möchte über die Anwendung2 die Instanz beenden.
ole := createOLEObject('Application.updater');
Über die Anwendung2 greife ich auf die Instanz mit
Delphi-Quellcode:
zu.
getActiveOLEobject('Application.updater')
Mein Problem ist, wenn sie die erste Anwendung schließt, schließt sich die Instanz auch. wie kann ich über die Zweite Anwendung das Object schließen? |
AW: COM Object freigeben
Hat denn keiner eine Lösung?
|
AW: COM Object freigeben
*Push*
|
AW: COM Object freigeben
Wie war das nochmal mit den 24 Stunden zwischen puschen:gruebel:
Stichworte wären hier der direkt aufruf der Release und AddRef Methoden um den Referenzcounter entsprechend zu beeinflussen. Oder schauen ob das ![]() Oder du schaust ob du nicht eine COM+-Applikation verwendest. Dort sind solche Anwendungsfälle mit "stehenbleibenden" COM-Server vorgesehen. |
AW: COM Object freigeben
Oh entschuldige bitte, ich wusste nicht das ich 24h warten muss.
Zitat:
Ich starte ja die COM + Application über eine andere Anwendung. jedoch schließt die Application, wenn die Anwendung beendet wird. |
AW: COM Object freigeben
hallo
ich habe die Funktionen
Delphi-Quellcode:
,
AddRef
Delphi-Quellcode:
und
Release
Delphi-Quellcode:
gefunden.
QueryInterface
Nun leider kann ich diese nicht ausführen da ich immer eine fehlermeldung bekomme, das dies vom Objekt nicht unterstützt wird. Muss ich das noch irgendwo einbinden? |
AW: COM Object freigeben
Wenn du verhindern willst, dass deine Serveranwendung beendet wird, dann kannst du das über das Event OnLastRelease verhindern:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin // Wenn die Anwendung über COM hochgezogen wurde und der letzte Client die Verbindung // beendet dann Anwendung nicht beenden (wird in dem Event-Handler gesteuert). ComServer.OnLastRelease := Self.HandleComServerOnLastRelease; ... procedure TMainForm.HandleComServerOnLastRelease(var Shutdown: Boolean); begin // Anwendung weiter laufen lassen, wenn der letzte Client die Verbindung abbaut ShutDown := False; end; |
AW: COM Object freigeben
wo hast du diese Funktion her
Delphi-Quellcode:
muss mann da jetzt noch eine Unit einbinden?
Self.HandleComServerOnLastRelease;
|
AW: COM Object freigeben
Die steht doch direkt unten drunter.
|
AW: COM Object freigeben
ja ich über geber der Procedure ein Parameter der nie benutzt wird?
und das versteh ich grad nicht so ganz. |
AW: COM Object freigeben
Das ist ein Var-Parameter, mit dem Du steuern kannst, wie sich das Objekt verhalten soll.
|
AW: COM Object freigeben
Die Funktion habe ich hin bekommen.
Aber wenn ich meine Application schließe dann wird mein COM server auch mit beendet. Ich denke ich habe hier noch irgendwas vergessen. falls es hilft hier mal mein Quellcode
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin try test := CreateOleObject('Application.Updater'); except test := GetActiveOleObject('Application.Updater'); end; test.FTP_Host := FTPHost.Text; test.FTP_User := FTPUser.Text; test.FTP_Passwort := FTPPasswort.Text; test.ClientName := ClientName.Text; test.ClientVersion := ClientVersion.Text; test.ClientHandle := ClientHandle.Text; Test.StartServer; ComServer.OnLastRelease := self.HandleComServerOnLastRelease; end; |
AW: COM Object freigeben
Was ist denn ComServer und was ist test?
|
AW: COM Object freigeben
ohh sorry...
Hab vergessen mit rein zulegen...
Delphi-Quellcode:
ComServer ist aus der Uses ComServ
test : OLEVariant;
da ist die Funktion
Delphi-Quellcode:
deklariert.
OnLastRelease
|
AW: COM Object freigeben
Was ich meinte: Du startest doch Test (das ist der COM-Server, der Dich interessiert). Wieso weist Du dann nicht auch Test den Eventhandler zu? Oder habe ich Dich falsch verstanden?
|
AW: COM Object freigeben
ich kann das Event nicht dem test zuweisen, bekomme dann eine Fehlermeldung, das dies vom Objekt nicht unterstützt wird.
Delphi-Quellcode:
b:= false;
test.OnLastRelease := self.HandleComServerOnLastRelease(b); |
AW: COM Object freigeben
Und so?
Delphi-Quellcode:
test.OnLastRelease := self.HandleComServerOnLastRelease;
|
AW: COM Object freigeben
ne.
Fehlermeldung : Parameter erwartet. |
AW: COM Object freigeben
ComServer ist ein globales Objekt der VCL, genauso wie z.B. Application und Screen.
Und natürlich muss mein vorgeschlagener Code im Server und nicht im Client platziert werden! |
AW: COM Object freigeben
ja das habe ich grad gemerkt, danke für eure Hilfe
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 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-2025 by Thomas Breitkreuz