AGB  ·  Datenschutz  ·  Impressum  







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

Anwendung von "außen"beenden

Ein Thema von bmontag · begonnen am 16. Feb 2009 · letzter Beitrag vom 17. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
bmontag

Registriert seit: 16. Feb 2009
10 Beiträge
 
Delphi 7 Enterprise
 
#1

Anwendung von "außen"beenden

  Alt 16. Feb 2009, 12:47
Erstmal von mir als Neuling in diesem Forum ein HALLO an Alle.

Jetzt zu meinem Problem, mit dem ich mich seit einigen Tagen herumschlage. Ich habe aus einer bereits bestehenden Anwendung eine dll gebaut. Diese dll kann ich aus einer DELPHI- oder C++ Anwendung heraus als Thread starten. Dazu habe ich die bestehende Anwendung um eine UNIT erweitert, die mir als Parametrierplattform dient. Das funzt auch soweit gut. Ich habe ein Problem beim Beenden meiner in der dll "gekapselten" Anwendung.
Wenn ich meine Anwendung über den "normalen Weg" beende - das Programm hat oben rechts kein "rotes Kreuz" - läuft allse prima. Nur der Weg von "außen" funktioniert nicht. Ich dachte ich "drücke" aus der übergeordneten Anwendung einfach die Tasten, mit denen ich die Anwendung normal beende aber PUSTEKUCHEN. Das Ende ist immer eine Exeption
"Fehler beim Erstellen des Fenster-Gerätekontext". Und ich finds einfach nicht
Im Klartext: die übergeordnete Anwendung initialisiert die gekapselte Anwendung in der dll über

Code:
procedure eyesiMPInitialize(pos_x,pos_y:integer; MachineDir : PAnsiChar);stdcall;
begin
  eyesiLock := TCriticalSection.Create;
  UsrIntThread:= TUsrIntThread.create(false);
  UsrIntThread.position_x:=pos_x;
  UsrIntThread.position_y:=pos_y;
  UsrIntThread.Resume;
end;
UsrIntThread.create startet dann

Code:
procedure TUsrIntThread.execute;
begin
  Application.Initialize;
  Application.CreateForm(TF01Start, F01Start);
  Application.CreateForm(TF10Msge, F10Msge);
  Application.CreateForm(TF14Service, F14Service);
  Application.CreateForm(TF27End, F27End);
   .
   .
  Application.ShowMainForm := false;[delphi]
  Application.Run;
Dann startet meine Anwendung zunächst unsichtbar. Dann wird sie von außen gesteuert über

Delphi-Quellcode:
procedure eyesiMPStart;stdcall;
begin
  UsrIntThread.StartForm := 13; // EYESI-Startformular setzen
  UsrIntThread.eyesi_Operateur := 1;
  UsrIntThread.eyesi_Operation := 1;
  UsrIntThread.eyesi_OPSchritt := 1;
  SerKomWin.EyesiClickFunktionen(2);
end;
sichtbar gemacht.

.... Nur eben das saubere beenden. Kann mir jemand einen TIP geben ????

DANKE im Voraus
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 15:19
Delphi-Quellcode:
Application.Initialize;
Application.CreateForm(TF01Start, F01Start);
Application.CreateForm(TF10Msge, F10Msge);
Application.CreateForm(TF14Service, F14Service);
Application.CreateForm(TF27End, F27End);
Da hat aber jemand kräftig Reverse-Engineering betrieben, wa?

Ansonsten: Keine VCL-Aktionen in Threads direkt ausführen, da diese nicht Thread-Safe sind.
  Mit Zitat antworten Zitat
bmontag

Registriert seit: 16. Feb 2009
10 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 16:38
Hallo und erst mal vielen Dank für die Antwort.

Ne, Zweck der Übung ist es, ein und dieselbe GUI entweder auf einer realen Maschine oder in einer Simulator-Umgebung laufen zu lassen. Es ist nicht alles gleich Reverse Eng.
Aber mal zum Thema: Ja ich weiss, keine VCL-Aktivitäten in Threads... aber wie sonst ? Ich kann den create in eine eigene Funktion packen und mit synchronize aufrufen ?? Aber ich sehe den Zusammenhang mit meinem Problem nicht... Zudem habe ich alle "globalen" Variablen, die den Datenaustausch zwischen den beiden "Welten" regeln durch CRITICAL SECTIONS gesichert.

Grüße

Bernd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 16:43
noar, wenn er alles (samt der Nachrichtenschleife) in dem gleichen Thread laufen läßt, dann könnte es eventuell gehn.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bmontag

Registriert seit: 16. Feb 2009
10 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 17:47
Hallo zusammen,

eventuell bin ich ja mit meinem Lösungsansatz auf dem Holzweg. Also.. ich habe eine GUI, die über serielle Schnittstelle mit einer Steuerhardware kommuniziert. Die gleiche GUI soll in einer Simulationsanwendung als dll laufen und von einem C-Programm so angesteuert werden, als ob die Steuerhardware vorhanden wäre. Also war mein Lösungsansatz... die GUI als dll verpacken und als Thread vom C-Programm ansteuern lassen. Eventuell gibt es ja für mein Problem auch einen anderen Lösungsansatz, den ich bisher nicht gefunden habe.

Grüße

Bernd
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 17:55
Hast du die GUI, welche die echte Hardware ansteuert selber geschrieben?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
bmontag

Registriert seit: 16. Feb 2009
10 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 18:44
Ja,

aus diesem Grund ja die Idee, den Sourcecode zu nehmen, ne dll daraus zu bauen und als parallelen Thread aus dem Simulatorprogramm heraus aufzurufen. Der Vollständigkeit halber sei erwähnt, dass das Simulator-Programm nicht von mir ist. Ich habe mir ein Delphi Programm geschrieben, das mir die Funktionsaufrufe des Simulators nachbildet. Die Definition der Schnittstelle zwischen Sim und meiner GUI ist aber auch von mir. Ich liefere dem SIM-Progi meine dll.

Grüße

Bernd
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 19:31
Ich glaube dann (auf Grund des fremden Simulatorprogramms) fällt ActiveX aus.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
bmontag

Registriert seit: 16. Feb 2009
10 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 19:33
Ja,

glaube ich auch. Sonst irgendeine Idee von irgendjemand ???? Bin echt ratlos !!!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Anwendung von "außen"beenden

  Alt 16. Feb 2009, 19:48
Und warum willst du die Anwendung nich einfach als eigenen Process starten (evtl ohne Create_New_console)?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:38 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