Einzelnen Beitrag anzeigen

bmontag

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

Anwendung von "außen"beenden

  Alt 16. Feb 2009, 11: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