C# App.exe --- MFC/C++ .exe

05/09/2009 - 10:34 von Claudia Maier | Report spam
Hallo,

eine interessante Aufgabe.

C# App.exe
MFC/C++ .exe

Was will ich?
Die MFC.exe làuft.
Die C#Exe wird weiterentwickelt.

Idee:
Von der MFC Exe benötige ich 2 Funktionen
int Func1(double value, string comment)
int Func2(double value, int pulse, string comment)

Kann ich jetzt über CreateProcess oder so von der
C# Anwendung die MFC exe starten und die Funktionen aufrufen.

Wenn ja wie?
Wie meldet mir jetzt die MFC .Exe, dass die Funktion fertig ist.
Event?

Wie kann die Lösung aussehen?
Geht das überhaupt?

Prozessflow:
C# Exe startet. Doppelklick.
ruft dann automatisch die MFC.Exe auf, nicht der Bediener.
C# ruft dann die MFC Funktionen auf.
Der Fertigevent kommt zurück


Grüße Claudia
 

Lesen sie die antworten

#1 Wolfgang Schmidt
05/09/2009 - 16:04 | Warnen spam
Hi,

der saubere Weg ist es die gemeinsam genutzten Funktionen in eine dll
auszulagern, und diese dann in den beiden Projekten zu referenzieren.


Manchmal ist aber egal das ganze sauber zu machen. Irgendeine "managed"
Applikation kann auch simpel per Reflection geladen und durchsucht/
Funktionen gezielt ausgeführt werden (Sichtbarkeiten beachten, bsp.
in otherapp.exe
public static int Func1(double value, string comment)
{
return 5;
}

->

System.Reflection.Assembly aAssembly =
System.Reflection.Assembly.LoadFile(Path.Combine(Application.StartupPath,"otherapp.exe"));

foreach (Type aType in aAssembly.GetTypes()) // wenn man nicht
genau weiß, wo den nun die MEthode liegt, ansonsnte nur GetType(...)
{
if (aType.IsClass == true)
{
if (aType.GetMethod("Func1") != null) // Gibt es die
Methode, ansonsten suche in den anderen Klassen weiter

// Tipp GetMethod liefert eine MethodInfo zurück,
MethodInfo.GetParameters () zeigt dann nàher, ob da das erwartete reinkommen
kann
{
object[] aArguments = new object[] { 2.0, "Zwo" };
object aResult;
aResult = aType.InvokeMember("Func1",
System.Reflection.BindingFlags.Default
| System.Reflection.BindingFlags.InvokeMethod,
null,
null,
aArguments);
//aResult würde dann die Rückgabe 5 als Object
enthalten
}
else
{
//Methode gibts leider hier nicht
}
}
}

für unmanaged code ist es hàßlicher, siehe z.B.
http://bytes.com/topic/c-sharp/answ...naged-code

Gruß
Wolfgang




"Claudia Maier" schrieb im Newsbeitrag
news:
Hallo,

eine interessante Aufgabe.

C# App.exe
MFC/C++ .exe

Was will ich?
Die MFC.exe làuft.
Die C#Exe wird weiterentwickelt.

Idee:
Von der MFC Exe benötige ich 2 Funktionen
int Func1(double value, string comment)
int Func2(double value, int pulse, string comment)

Kann ich jetzt über CreateProcess oder so von der
C# Anwendung die MFC exe starten und die Funktionen aufrufen.

Wenn ja wie?
Wie meldet mir jetzt die MFC .Exe, dass die Funktion fertig ist.
Event?

Wie kann die Lösung aussehen?
Geht das überhaupt?

Prozessflow:
C# Exe startet. Doppelklick.
ruft dann automatisch die MFC.Exe auf, nicht der Bediener.
C# ruft dann die MFC Funktionen auf.
Der Fertigevent kommt zurück


Grüße Claudia

Ähnliche fragen