Entwickler-Ecke

Sonstiges (.NET) - MFC-Applikation unter .NET


Snoboldo - Di 21.04.09 16:52
Titel: MFC-Applikation unter .NET
Hallo,

sitze derzeit an einer Applikation, die unter Visual C++ 6.0 (C++, MFC) geschrieben wurde. Mein Ziel ist es
diese Applikation auf C# zu portieren. Gibt es eine Möglichkeit diesen (unmanaged) Code unter C# zu
verwenden? Ich stelle mir das so vor, dass aus dem alten Code entsprechende DLLs erzeugt werden, die dann unter
C# (Visual Studio 2005 oder 2003) verwendet werden können. Ist so etwas möglich bzw. auch sinnvoll, oder
sollte am besten gleich die Anwendung in C# geschrieben werden?

Gruß

S


JasonDelife - Fr 24.04.09 21:39

Ja, man kann in C# unmanaged C/C++ verwenden, mit P/Invoke.
So ungefähr:

C#-Quelltext
1:
2:
3:
4:
using System.Runtime.InteropServices;
// ...
[DllImport("someUnmangedDll.dll")]
private extern int TheNameOfTheUnmangedFunction(int myIntParam);

Einfach mal MSDN nach DllImport und P/Invoke durchsuchen.
So, nun das ABER:
P/Invoke ist dazu da, um performancekritische Teile in (schnelleren) unmanged Code auszulagern
oder um Win32-API-Funktion / Funktionen, die man in C# nicht schreiben kann (Treiber, ...) zu nutzen.
Außerdem sind P/Invoke-Aufrufe um ein vielfaches langsamer als der Aufruf einer C#-Methode.
Du solltest also (wenn möglich) alles komplett in C# schreiben. Wenn es C++-Code gibt, den du nicht portieren kannst
(wie oben gesagt), dann solltest du NUR diesen Code in eine unmanaged DLL packen und mit P/Invoke aufrufen.


Grüße, JasonDelife.


Kha - Fr 24.04.09 22:55

C++/CLI bietet eine quasi nahtlose Integration in beide Richtungen. Ob das besser ist als die Anwendung gleich neu zu schreiben, kann ich nicht beurteilen.


Snoboldo - So 26.04.09 13:33

Danke für eure Antworten. Das Thema hat sich aber erstmal erledigt. Falls jemand ein ähnliches Problem hat,
so gäbe es noch den Weg managed Wrapper-Klassen zu erzeugen, deren Methoden auf die unmanaged-Klassen verweisen.

Gruß


Robert.Wachtel - So 26.04.09 13:55

user profile iconSnoboldo hat folgendes geschrieben Zum zitierten Posting springen:
[...] gäbe es noch den Weg managed Wrapper-Klassen zu erzeugen, deren Methoden auf die unmanaged-Klassen verweisen. [...]

Also das, was JasonDelife ja schon erwähnt hat.