C++ Projekte für Verwendung in .NET/C# portieren

Alechseij

Grünschnabel
Hallo zusammen,

ich arbeite (mit VS2008 professional) an einer umfangreichen Software, die bislang ausschließlich in C++ programmiert wurde. Das GUI ist derzeit noch mit MFC realisiert.
Nun möchte ich das GUI auf .NET umstellen. Meine Solution besteht aus mehreren C++ Projekten, welche die eigentliche Programmlogik enthalten und als DLLs erstellt werden.
In einem neuen Projekt will ich jetzt das GUI mit C# implementieren.

Meine Frage: Wie mache ich die C++ Klassen und ihre Methoden für das C# Projekt verfügbar?

Was ich bisher versucht habe:
- Compilieren mit /clr erfolgreich durchgeführt
- Projektverweise auf die C++/CLI Projekte in das C# Projekt eingefügt

Wirkung:
- Die importierten Typen sind in C# zwar bekannt, aber ihre Deklaration ist seltsam/falsch. Alle Klassen sind nämlich als structs und ohne jeglichen Member/Methode importiert worden :confused:

Habe schon eine ganze Weile in den Foren und bei MSDN danach gesucht, aber nur sehr lückenhafte Infos gefunden . Bitte lasst es mich wissen, wenn hier doch ein Thread/Tutorial dazu existiert.

Grüße und vielen Dank
Alechseij
 
Hi.
Was ich bisher versucht habe:
- Compilieren mit /clr erfolgreich durchgeführt
- Projektverweise auf die C++/CLI Projekte in das C# Projekt eingefügt

Wirkung:
- Die importierten Typen sind in C# zwar bekannt, aber ihre Deklaration ist seltsam/falsch. Alle Klassen sind nämlich als structs
Das ist richtig. (Reine) C++ Klassen werden in Wertetypen in .NET übersetzt.
und ohne jeglichen Member/Methode importiert worden :confused:
Mit /clr Unterstützung zu kompilieren, heißt nicht, dass plötzlich alle unmanaged Klassen und ihre Methoden in .NET zur Verfügung stehen.

Es gibt verschiedene Methoden zur Verwendung von unmanaged Code in .NET

1. C++/CLI IJW
2. SWIG Wrapper Generator
3. P/Invoke

1) ist vermutlich am einfachsten: Erstelle dein GUI nicht in C#, sondern mit C++/CLI - du kannst dann einfach die vorhanden Bibliotheken nutzen => it just works

Alternativ kannst du auch ein Wrapper-Projekt in C++/CLI erstellen, indem du die ganzen Klassen als managed zur Verfügung stellst, die du in der C# GUI dann benutzen kannst.

Gruß
 
Hallo :)

ich danke Dir für Deine schnelle und hochinformative Antwort!
Sehr wahrscheinlich werde ich Variante 1 umsetzen, d.h. ausgesuchte Zugriffe auf die C++ Bibl. für C# bereitstellen.

Gruß
Alechseij
 

Neue Beiträge

Zurück