Forum: PC-Programmierung C++ mit Windows Forms?


von Bernd (Gast)


Lesenswert?

Hallo,

ich möchte ein Windows Programm für Abgleichzwecke schreiben. Ich habe 
mir Visual Studio Community 2017 installiert und mit eine C++ Projekt 
bekonnen. Leider finde ich hier keine Vorlagen um ein Windows Form für 
ein GUI hinzuzufügen. Diese Möglichkeit scheint mir nur C# zu bieten, 
dann habe ich allerdings Probleme meine DLL einzubinden. Ist es richtig, 
dass ich mit C++ nur Konsolenanwendungen schreiben kann?

Vielen Dank und noch einen schönen Tag

Bernd

von dumdidum (Gast)


Lesenswert?

Nein. Du kannst auch in C++ eine GUI direkt programmieren. Leider geht 
der visuelle Designer nur mit c#.

von Oliver S. (oliverso)


Lesenswert?

Wenn es so ist, das du mit Visual C++ nur Consolenanwendungen schreiben, 
und mit C# keine DLLs einbinden kannst, dann ist das halt so.

https://docs.microsoft.com/de-de/cpp/windows/desktop-applications-visual-cpp
https://developercommunity.visualstudio.com/content/problem/10857/cant-find-the-template-for-mfc-programming-in-file.html

Oliver

: Bearbeitet durch User
von Sebastian E. (Gast)


Lesenswert?

Was du suchst ist wahrscheinlich C++/CLI. Damit kannst du wahlweise 
reine .NET oder Mixed-Mode (.NET und nativer code) Assemblies erstellen.

von Holger74 (Gast)


Lesenswert?

Was immer noch gut funktioniert:

"C++ WindowsFormsAnwendung" in VisualStudio2008 erstellen. Dann in
VisualStudio2013(?2017)importieren. Dann funktioniert auch der
AnwendungsDesigner für C++ Projekte in neueren Versionen vom
VisualStudio.

von Frank F. (frank_f49)


Lesenswert?

nimm VisualStudio2013, ich  hab  in VisualStudio2017 es ebenfalls nicht
geschafft den Button  für WindowsForms zu finden.

Ich glaube  C#  ist  C++  bei Microsoft, und die meinten
Beispiele die man findet  sind  C#.

Ich würde  C# nehmen.  Und ich wette ein Wochengehalt daß  man
C libraries auch in  C# einbinden kann.

von Peter II (Gast)


Lesenswert?

Frank F. schrieb:
> Ich würde  C# nehmen.  Und ich wette ein Wochengehalt daß  man
> C libraries auch in  C# einbinden kann.

klar kann man das, aber es gibt sehr wenig Gründe warum man das machen 
sollte.

Unter C# kann man die GUI auch mit WPF machen.
Ein GUI lastige Anwendung würde ich auch nicht mehr mit c(++) machen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank F. schrieb:
> Ich glaube  C#  ist  C++  bei Microsoft

Nein. C# ist C#, und C++ ist entweder richtiges C++ (dann gibt es keine 
.Net-Unterstützung) oder eine MS-Perversion namens "Managed C++" bzw. 
"C++/CLI", die so ähnlich aussieht wie C++, aber um Spezialitäten 
verschlimmbessert wurde, um mit dem .Net-Geraffel zu koopierieren.

Windows Forms sind eine .Net-Technik, lassen sich also nur mit einer 
.Net-Sprache nutzen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Frank F. schrieb:
> Und ich wette ein Wochengehalt daß  man C libraries auch in  C#
> einbinden kann.

Diese Wette ... wird aufwendig. Nativen C-Code kannst Du in C# nur über 
den umständlichen Umweg einer DLL nutzen, und dann hast Du noch den 
ganzen "Marshaling"-Kram an der Backe.

Aber hier geht es gar nicht um C-Libraries, denn "Windows Forms" hat 
nichts mit nativem Code zu tun, sondern ist .Net-Geraffel.

von nicht"Gast" (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> .Net-Unterstützung) oder eine MS-Perversion namens "Managed C++" bzw.
> "C++/CLI", die so ähnlich aussieht wie C++, aber um Spezialitäten

Nun ja, eigentlich war das mehr eine Handreichung um vorhandem C++ Code 
zu WinForms zu verhelfen. Microsoft selber hat immer gesagt, dass es 
nicht dafür gedacht ist, neue Projekte damit aufzuziehen.

Egal, wie auch immer seit VS2012 gibts keine Unterstützung mehr für 
C++/CLI.


Zum Thema. Wer C++ kann wird sich auch recht schnell in C# reinfinden. 
Die Unterschiede sind zwar für einen Kenner beider Welten riesig, aber 
im Grunde ist die Kluft nicht so tief.

von Vlad T. (vlad_tepesch)


Lesenswert?

@Op
schau dir doch mal Qt an, dann isses auch gleich Platformunabhängig.
Wenn der Gui-Anteil nicht so groß ist, reicht vielleicht aber auch ein 
weniger mächtiges Framework.

von Peter II (Gast)


Lesenswert?

Vlad T. schrieb:
> schau dir doch mal Qt an, dann isses auch gleich Platformunabhängig.

genau wie .net

von Flip (Gast)


Lesenswert?

nicht"Gast" schrieb:
> Egal, wie auch immer seit VS2012 gibts keine Unterstützung mehr für
> C++/CLI.

Natürlich wird C++/CLI auch in der neuesten Version von VS unterstützt 
("Templates unter Visual C++ - CLR"). Wäre ja sonst auch ziemlich blöd 
für Leute, die damit Wrapper für nativen Code schreiben wollen.
Genau dafür ist es nämlich gut geeignet und bei etwas umfangreicheren 
Bibliotheken deutlich einfacher und "weniger komisch" als P/Invoke, da 
man einerseits richtiges C++ (und damit z.B. C++-Bibliotheken), 
andererseits in der Schnittstelle zu .NET die entsprechenden 
Erweiterungen verwenden kann.

von Holger74 (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist ein leeres VisualStudio2013  C++ WindowsForms Projekt.
VisualStudio unterstützt immer noch C++. Es lassen sich nur keine
neuen Projekte erzeugen. Bei existierenden Projekten funktioniert
alles wie gehabt.
Ob das Projekt hier unter VS2017 geht, müsste mal jemand probieren,
der VS2017 in Verwendung hat.

von Flip (Gast)


Lesenswert?

Holger74 schrieb:
> Hier ist ein leeres VisualStudio2013  C++ WindowsForms Projekt.
> Ob das Projekt hier unter VS2017 geht, müsste mal jemand probieren,
> der VS2017 in Verwendung hat.

Funktioniert, aber mit Warnungen:

Command line warning D9035: option 'clr:pure' has been deprecated and 
will be removed in a future release

'System::Security::Permissions::SecurityAction::RequestMinimum': marked 
as obsolete

> Es lassen sich nur keine neuen Projekte erzeugen.

Richtig, keine WinForms-Projekte für C++/CLI, aber davon rät MS ohnehin 
schon seit vielen Jahren ab. Ich würde von C++/CLI - außer für Wrapper 
und evtl. spezielle Konsolen-Tools, die sowohl mit .NET als auch mit 
nativem Code klarkommen müssen - die Finger lassen ... Und genau für 
diese beiden Einsatzzwecke gibt es ja auch in VS 2017 noch 
Projektvorlagen.

@Bernd

Da hast also folgende Möglichkeiten (VB sowie App-Zeugs ignoriere ich 
mal):

1. C# und WinForms oder WPF verwenden und P/Invoke für deine DLL 
benutzen.
http://openbook.rheinwerk-verlag.de/visual_csharp/visual_csharp_20_002.htm#mj391e583525457812f4c9b85ab37a758e

2. C# und WinForms oder WPF verwenden und einen C++/CLI-Wrapper für 
deine DLL schreiben.
https://code.msdn.microsoft.com/windowsdesktop/CppCLINativeDllWrapper-29c32acd

3. C++ verwenden und die Windows-C-API (Ressourceneditor als 
Hilsmittel).
http://zetcode.com/gui/winapi/

4. C++ verwenden und eine GUI-Bibliothek deiner Wahl (Qt, MFC, WTL, 
wxWidgets, Win32++ oder was auch immer).

5. C++/CLI und WinForms.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Flip schrieb:
> 3. C++ verwenden und die Windows-C-API (Ressourceneditor als
> Hilsmittel).

Für Masochisten gibt es dann auch noch:

C verwenden zusammen mit der Windows-API.

Als Buch empfiehlt sich da der Petzold*.

Klingt bizarr, hilft einem aber zu verstehen, wie das ganze 
Windows-System mit Fenstern, Nachrichten etc. tatsächlich 
funktioniert.

Die diversen GUI-Libraries verbergen diesen Unterbau mehr oder weniger 
gründlich.



*) Charles Petzold, "Programming Windows"

Antiquarisch. Die ersten drei Ausgaben davon beschäftigten sich mit der 
16-Bit-API von Windows 3.x, die will man sich dann doch vielleicht nicht 
mehr antun, man will die vierte (1996) oder fünfte (1998) haben.
Auch wenn das Buch zwei Jahrzehnte auf dem Buckel hat, die Grundkonzepte 
haben sich nicht verändert.

Borland hat die dritte Ausgabe mal mit einem ihrer Compiler zusammen 
ausgeliefert, das war Borland C++ 3.0, wenn ich mich recht erinnere.

von Eric B. (beric)


Lesenswert?

Mal kurz zurück zu der eingentliche Frage:

> ich möchte ein Windows Programm für Abgleichzwecke schreiben.

Was willst du da Abgleichen? Wenn z.B. 2 Dateien oder Verzeichnisse 
inhaltlich verglichen werden sollen, brauchst du nix selbst schreiben: 
kdiff3, Beyond Compare, usw tun genau das.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.