2 Exe gleichzeitig
-
Hi zusammen,
ich habe eine Frage.
Und zwar:
Ich starte aus einem Programm (über einen Menüeintrag) eine neue Exe.
In dieser EXE geht ein Dialog auf. Nun will ich, wenn ich wieder in die 1. Exe klicke, dass der Dialog der 2. Exe sich minimiert und die 1. Exe wieder aktiv ist.
Im Moment ist es so, sobald ich die 2. Exe starte und er Dialog auf ist, ist meine 1.Exe inaktiv. Ich muss erst den Dialog der 2.Exe schliessen, damit die 1. Exe wieder aktiv ist.
(Die 2. Exe verhält sich in dem Fall wie ein modaler Dialog)Hat jemand eine Idee?
-
Warum baust Du hier zwei EXE's?
Mach alles ein einer, oder verlagere die Kernfunktion in eine DLL!
-
Es sind halt 2 Anwendungen. Den Hintergrund warum kenne ich leider nicht.
Es muss doch irgendiwe über den Cursor gehen, oder?
-
Die Frage ist, wie das in dieser Anwednung gemacht wurde. Von selbst wird eine Anwendungbeim Starten nicht inaktiv.
Schau Dir mal den Code an, der die zweite Anwednung startet, vor allem wie er sie startet!
-
Folgender Ablauf:
hRes = g_pInterface.CreateInstance(__uuidof(Test::TestCOM)); HookEvent(g_pInterface);
-
Dann hast Du ein COM Problem... Du erzeugst ein COM Objekt und der Aufruf in diesem Object ist natürlich synchron. D.h. er returniert erst, wenn er eben fertig ist.
Du könntest in der Theorie, das Objekt in einem anderen Thread erzeugen, nur hast Du dann einmassives STA Problem und die Frage ist, wie weit wird eben noch mit dem Objekt gearbeitet... Was macht eben HookEvent?
Bevor Du mit einem zweiten Thread anfängst solltest Du Dir erstmal über die Implikation "Hier ist ein COM Objekt" klar werden.
-
Ich kann die EXE nicht als Thread umbauen.
Der Grund für ein COM Objekt ist die, da die 2 Exe auf eine DB Zugreift.
-
simcon schrieb:
Ich kann die EXE nicht als Thread umbauen.
Der Grund für ein COM Objekt ist die, da die 2 Exe auf eine DB Zugreift.Du hast es nicht verstanden.
1. Deine Applikation blockiert (zwangsläufig) so lange wie Du in der zweiten EXE eine COM Funktion ausführst.
2. Du sollst die zweite EXE nicht als Thread umbauen, sondern den ZTugriff auf dieses COM Objekt der EXE in einen zweiten Thread auslagern. Aber Achtung! Das ist nicht ohne bei einem STA!
3. Der Zugriff auf eine weitere DB ist keine Begründung für eine EXE! Man kann so etwas sicherlich weitaus besser lösen, als über einen Outofprocess Server, sofern man von beiden Programmen natürlich die Sourcen hat.
-
Ich glaub, dass ist ein grösseres Problem.
Das geht nicht mal so auf die Schnelle.....
Ist es überhaupt möglich?
-
simcon schrieb:
Ich glaub, dass ist ein grösseres Problem.
Ja! Ich sehe ein grundsätzliches Design Problem.
simcon schrieb:
Das geht nicht mal so auf die Schnelle.....
Ja!
simcon schrieb:
Ist es überhaupt möglich?

Ja!
-
Wie meinst Du das mit Design Problem?
-
Habe ich doch schon geschrieben: Es ist unsinnig über ein out of proc COM Objekt zum Beispiel Datenbank Zugriffe durchzuführen.
Es ist IMHO ach unsinnig blockierende UI Zugriffe auf einen Out Of Proc Server durchzuführen.
-
Ich bins mal wieder.....
Ich weiss jetzt wo das Problem liegt.
Und zwar ist die 2. Anwendung eine C# Applikation. Diese Applikation hat eine andere Message Pump als die MFC.
Hat jemand eine Idee, wie ich die Message Pump, oder besser gesagt eine Message von C# im MFC einlesen kann?Greetz
-
Und? Was spielt das für eine Rolle welche Art von Message Loop verwendet wird?
Im Kern nutzt jede Message Loop die gleichen Funktionen GetMessage / PeekMessage / TranslateMessage / DispatchMessage. Auch C# Anwednungen sofern Sie als UI laufen und nicht als Console.
Du hast synchrone COM Aufrufe, soweit ich mich erinnere. Das ist Dein Problem...
-
Seh ich das jetzt falsch?
Wenn in meiner MCF Applikation eine .net Applikation aufrufe, so ist meine MFC Applikation "gesperrt". Ich muss zuerst die .net Applikation schliessen, um wieder auf die MFC Applikation zu kommen.
Da ist doch das Problem, dass ich .net Applikation nicht einfach minimieren kann.
Die Message, die die .net Applikation sendet, kann ich doch in der MFC Applikation nicht empfangen, oder?
Wenn doch, wie?
-
simcon schrieb:
Seh ich das jetzt falsch?
Wenn in meiner MCF Applikation eine .net Applikation aufrufe, so ist meine MFC Applikation "gesperrt".WIE *rufst* Du die den auf?????
IMHO ging es doch darum einen *Prozess* zu _starten_!EDIT: Upps... es geht um *synchrone* COM Aufrufe (das kann man aber auch nur erraten, oder Martin?)
Dann Rate ich diese in einen eigenen Thread auszulagern.
-
Hab ich doch schon erwähnt.
Ueber eine Instanz:hRes = g_pInterface.CreateInstance(__uuidof(Test::TestCOM)); HookEvent(g_pInterface);
-
Jochen Kalmbach schrieb:
EDIT: Upps... es geht um *synchrone* COM Aufrufe (das kann man aber auch nur erraten, oder Martin?)
Dann Rate ich diese in einen eigenen Thread auszulagern.
-
Hast Du mir dann mal ein kleines Code Beispiel?
Muss ich dann anstatt der Instantance ein Thread aufrufen?
-
Zeig mal, WAS denn das problem verursacht!
Das konnte ich bisher aus Deinem Code noch nicht erkennen...Auch: Hast Du "Multi-Threading" bei COM-Aktiviert oder "Apartment-Threading"?