Autor Beitrag
Snoboldo
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.04.09 16:52 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

Windows 7 Professional
C# (Visual Studio 2008 Professional), Java (NetBeans IDE 6.7)
BeitragVerfasst: Fr 24.04.09 21:39 
Ja, man kann in C# unmanaged C/C++ verwenden, mit P/Invoke.
So ungefähr:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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.