Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden? (https://www.delphipraxis.net/177114-ole-fernsteuerung-objekt-freigeben-ohne-ferngesteuerten-prozess-zu-beenden.html)

tenikx 17. Okt 2013 09:57

OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden?
 
Hallo zusammen,

ich schreibe eine Anwendung, die ein anderes Programm (Stata) per OLE fernsteuert. Der Zugriff funktioniert auch prima per CreateOLEObject(...).

Allerdings, sobald mein Programm beendet wird, wird auch das ferngesteuerte Programm geschlossen. Das möchte ich vermeiden, da das ferngesteuerte Programm je nach Situation auch schon vorher läuft.

Ich bin mittlerweile darauf gestoßen, dass es wohl mit der Freigabe des OLE-Objektes zu tun hat. Denn wenn ich das OLE-Objekt als lokale Variable in einer Prozedur definiere, wird das ferngesteuerte Programm bereits bei verlassen der Prozedur beendet und nicht erst bei Beendigung meines Programms insgesamt. Zumindest dies konnte ich umgehen, indem ich die Variable global definiert habe.

Trotzdem wäre es wünschenswert, wenn man dafür sorgen könnte, dass die Anbindung an das ferngesteuerte Programm zu einem beliebigen Zeitpunkt aufgelöst wird, ohne dieses zu beenden.

Jemand eine Idee? Ich habe schon vielfach auf Google und in Foren gesucht, aber vielleicht komme ich nicht auf die richtigen Suchbegriffe...

Danke im Voraus für jede Hilfestellung!
Tobias

Bernhard Geyer 17. Okt 2013 10:05

AW: OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden?
 
Das hört sich eher danach an das auf seiten des zu steuernden Programmes was falsch implementiert wurde.
Standardmäßig ist es so das die Anwendung weiterläuft wenn sie vor dem Start der Automatisierung gelaufen ist und sich nur beendet wenn sie auch von der Automatisierung gestartet wurde.

Kannst du denn Fall den mittels einfachen VBS-Script nachstellen?
Falls ja würde ich den Hersteller der entsprechenden Anwendung um eine Fehlerkorrektur bitten.

tenikx 17. Okt 2013 14:03

AW: OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden?
 
Vielen Dank für die schnelle Antwort, Bernhard!

Ich werde das auf jeden Fall bei dem Hersteller zur Sprache bringen. Allerdings ist es fraglich, ob der (rechtzeitig) reagiert...

Gibt es eine Möglichkeit, das Problem meinerseits zu umschiffen?

Danke und liebe Grüße
Tobias

Bernhard Geyer 17. Okt 2013 14:09

AW: OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden?
 
Zitat:

Zitat von tenikx (Beitrag 1232298)
Gibt es eine Möglichkeit, das Problem meinerseits zu umschiffen?

Keine Richtige. Du könntest probieren bei deinen Interfacezeiger mit _AddRef() den Refernzzeiger zu manipulieren.

tenikx 17. Okt 2013 15:44

AW: OLE-Fernsteuerung: Objekt freigeben, ohne ferngesteuerten Prozess zu beenden?
 
Nochmal danke, Bernhard.

Ich habe IInterface(fStataOLEVariant)._AddRef direkt hinter CreateOLEObject(...) ausgeführt. Das Problem wird dadurch nicht gelöst. Aber interessanterweise macht es einen Unterschied insofern, dass fStataOLEVariant nun eine lokale Variable sein kann und das Stata-Fenster trotzdem bis zum Ende des Gesamtprogramms (aber leider auch nur bis dann) geöffnet bleibt :(

Bringt Dich das auf eine weitere gute Idee für einen Work-Around?

Gruß
Tobias


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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