C# soll MFC Programm mit Event benachrichtigen



  • Guten Morgen Kollegen,
    ich brauche dringend Eure Unterstützung. Ich betreue ein C++ MFC Programm. Jedoch ist diese Programmiersprache nicht gerade mein Favorit. Sei es drum. Um besser und effizienter arbeiten zu können habe ich eine Schnittstelle mit c# erstellt. Datenaustausch per Datenbank. Das funktioniert auch sehr gut. Aber das MFC Programm bekommt nicht mit, wenn die Schnittstelle fertig ist. In diesem MFC Programm wird natürlich mit DCom Events gearbeitet. Unter anderem gibt es ein Event "OnExternalProgramFinished", welches signalisiert "Ich hab fertig".

    Gibt es eine Möglichkeit, dass ich mit dem c# Programm dieses Event ansprechen kann? Wenn ja wie???

    Vielen Dank
    Torsten



  • Wie wird der C# Teil aufgerufen? Lädst du den als DLL? Oder startest du eine .exe? Und Falls .exe: wie sagst du dieser was sie tun soll? Startest du jedes mal wenn du vom C# Teil was brauchst die .exe neu, oder bleibt die laufen und du kommunizierst irgendwie anders mit ihr?



  • Der C# Part ist ein Programm, welches im Hintergrund läuft und auf eine Austauschtabelle pollt. Gibt es etwas zu tun wird es erledigt. Aber das MFC Programm ist eine Werkerführung und soll mit dem Ergbenis des externen Programmes etwas auslösen. Ist das Ergebnis negativ, soll der Vorgang n mal wiederholt werden dürfen, dann Abbruch. Das Ergebnis wird zur Zeit aber erst eiungelesen, wenn die Werkerführung in den nächsten Step gehen will. Und das ist zu spät. Deshalb dachte ich an ein Event, welches die Werkerführung empfängt. ZUm Beispiel "OnExternalProgramFinished". Diese gibt es und wird von Programmen erzeugt, die durch die Werkerführung auch gestartet wurden. Aber die Schnittstelle läuft komplett im Hintergrund, da sie mehrere verschieden Aufgaben hat.



  • @Tossi65 sagte in C# soll MFC Programm mit Event benachrichtigen:

    Deshalb dachte ich an ein Event, welches die Werkerführung empfängt. ZUm Beispiel "OnExternalProgramFinished". Diese gibt es und wird von Programmen erzeugt, die durch die Werkerführung auch gestartet wurden.

    OK. Scheint aber was proprietäres zu sein. Der Knackpunkt hierbei ist auch: das funktioniert, weil die Programme von deinem C++ Programm aus gestartet wurden. Das ist einfach. Wenn das Programm anders gestartet wurde, und vor allem wenn es weiter läuft nachdem ein Task fertiggestellt wurde, dann wird es ungleich schwerer.

    Aber die Schnittstelle läuft komplett im Hintergrund, da sie mehrere verschieden Aufgaben hat.

    OK. Eine offensichtliche Möglichkeit wäre jetzt die MFC Anwendung auch die DB pollen zu lassen. Ansonsten könntest du noch einen "out of process" DCOM Server in deinem Hintergrundprozess implementieren. Der kann dann irgend ein Kommunikationsobjekt "anbieten". Das MFC Programm könnte dann eine Instanz dieses Kommunikationsobjekts erstellen. Weiters müsste das MFC Programm noch ein Benachrichtigungs-Interface implementieren. Das Benachrichtigungs-Interface kann dann an das Kommunikationsobjekt übergeben werden. Da das Kommunikationsobjekt im Hintergrundprozess implementiert ist, erhält der Hintergrundprozess so Zugriff auf ein Interface in der MFC Applikation. Und kann dann über dieses Interface eben Funktionen in der MFC Applikation aufrufen.

    Ich weiss jetzt halt nicht wie gut du dich mit DCOM und C#/DCOM Interop auskennst. Wenn nicht gut, dann ist das vermutlich alles ein bisschen viel. Wenn schon eher gut, dann könnte das ein guter Weg sein.


Anmelden zum Antworten