Ich habe viele Kommentare zur GUI-Programmierung sowohl in C # als auch in C ++ gelesen. Und mir ist aufgefallen, dass das .NET-Framework von Microsoft leistungsstark für die GUI-Programmierung ist. Ist es also möglich, C ++ und .NET Framework zu verwenden?
Ich denke, es wird eine großartige Kombination sein, da C ++ eine leistungsstarke Sprache ist und .NET Framework für die GUI-Programmierung unter Windows bevorzugt wird, wie ich gelesen habe. Ist es möglich, die GUI in C # und die Funktionalität in C ++ zu schreiben?
Antworten:
Ja, früher bekannt als Managed C ++ und jetzt als C ++ / CLI . Sie haben Zugriff auf das gesamte .NET Framework (GUI: WinForms, GDI + usw.) wie auf die anderen drei verwalteten Bundlesprachen C #, F # und VB.NET.
quelle
Vergessen Sie nicht die flexibelste und einfachste Option, die für die Unix-Welt typisch ist, aber aus irgendeinem Grund in Windows nicht so häufig vorkommt: Aufteilen von GUI und Logik in verschiedene Prozesse, Kommunikation über jede vernünftige Form von RPC (z. B. auch über eine Pipe) Arbeit). Vorzugsweise mit einem einfachen, lesbaren Textprotokoll.
Auf diese Weise können Sie Ihre GUI (oder verschiedene GUIs) mit jeder gewünschten Technologie implementieren und Logikkomponenten aufbauen, die den Anforderungen besser entsprechen - C ++, Skripte usw.
Ich kenne keine vernünftigen Vorteile eines monolithischen Designansatzes aus der Windows-Welt.
quelle
Das habe ich vor ein paar Jahren einmal gemacht, damals in den Tagen von Managed C ++. Wir hatten einige Geschäftslogik in einer umanagten DLL, die wir in eine in C # geschriebene GUI im Assistentenstil integrieren wollten. Zu diesem Zweck habe ich eine verwaltete C ++ - Assembly zwischen der verwalteten GUI-App und der nicht verwalteten DLL erstellt und System :: Runtime :: InteropServices :: Marshal in dieser Assembly verwendet, um Werte von verwalteten Typen (System :: Int32) in nicht verwaltete zu konvertieren types (int) und umgekehrt.
Managed C ++ scheint veraltet zu sein, für C ++ / CLI kann jedoch das gleiche Prinzip gelten.
quelle
Nicht wirklich. Es gibt eine hybride C ++ / CLI-Sprache, die jedoch nur für die Interoperation geeignet ist (offizielle Richtlinie von Microsoft). Aufgrund der Art und Weise, wie das .NET-Framework entworfen wurde, gibt es viele Sprachsemantiken, die in der CLR wirklich nicht funktionieren, und C ++ weist viele davon auf.
quelle
Der C ++ / CLI-Winkel wurde bisher von zahlreichen Antworten abgedeckt. Eine andere Möglichkeit hierfür ist die Verwendung von PInvoke. Auf diese Weise können C # -Programme Funktionen aufrufen, die in in C ++ geschriebenen DLLs enthalten sind. Der Vorteil von PInvoke ist, dass Ihre DLL völlig unabhängig von der Tatsache ist, dass sie von .Net aufgerufen wird. Das heißt, Sie können DLLs aufrufen, für die Sie keinen Quellcode haben, und selbst wenn Sie den Quellcode hätten, müssten Sie ihn nicht mit der Option / clr neu kompilieren. Dies bedeutet, dass Sie diese DLL mit anderen C ++ - und C # -Programmen verwenden können. Es gibt einige fantastische C / C ++ - Bibliotheken: Mit PInvoke können Sie diese nutzen. Manchmal bieten Win32-Bibliotheken Funktionen, die in .Net nicht verfügbar sind: Mit PInvoke können Sie sie verwenden.
Eine der schwierigsten Aufgaben bei der Verwendung von PInvoke besteht darin, die nicht verwaltete Signatur in eine verwaltete Signatur umzuwandeln. Aber es gibt einen Spickzettel , der dabei hilft.
quelle
Sie können auch über COM (Component Object Model) mit einem C # -Dill arbeiten. Für mich war COM besser als die Verwendung von Managed C ++, da Visual Studio 2010 kein Intellisense für Managed C ++ besitzt. In meinem Fall haben wir bereits eine große C ++ - Anwendung, wollten aber versuchen, von MFC zu WinForms oder WPF zu wechseln.
quelle