PDA

Vollständige Version anzeigen : Windows-Programme mit (plain) C++


Noodles
30.06.2004, 10:19
Original geschrieben von Stefan Kulpa
.. und wie wurden Windows-Programme geschrieben, als es "nur" ANSI C oder das erste C++ (IMHO noch ohne MFC) gab? M.E. kann man mit C++ durchaus Windows-Programme schreiben, nur nimmt einem die MFC viel Arbeit ab

Standard C++ kann keine Windows Programmierung, Threadprogrammierung, Datenbankprogrammierung ... . Die MFC ist ja nur ein Wrapper für die WinAPI, mit der zuvor die Windowsprogramme geschrieben wurden. Die WinAPI ist sehr C lastig und die MFC wird mir C++ verwendet.
Mit Standard C++ kann man jedenfalls KEINE Windowsprogramme schreiben.

Sascha Trowitzsch
30.06.2004, 11:40
Noodles, du schreibst da wirklich Käse!

- Die MFC ist kein Wrapper für's WinAPI
- C++ enthält einen Haufen Klassen, die gar nichts mit dem WinAPI zu tun haben. (ATL). Damit kann man Windows-Anwendungen ohne WinAPI schreiben.
- Mit Standard C (ohne ++) kann man Windows-Anwendungen schreiben, indem man das WinAPI bemüht. (CreateWindow, CreateThread, CreateProcess)

Ciao, Sascha

Noodles
30.06.2004, 12:05
Original geschrieben von Sascha Trowitzsch
Noodles, du schreibst da wirklich Käse!

- Die MFC ist kein Wrapper für's WinAPI
- C++ enthält einen Haufen Klassen, die gar nichts mit dem WinAPI zu tun haben. (ATL). Damit kann man Windows-Anwendungen ohne WinAPI schreiben.
- Mit Standard C (ohne ++) kann man Windows-Anwendungen schreiben, indem man das WinAPI bemüht. (CreateWindow, CreateThread, CreateProcess)

Ciao, Sascha

Sascha wer lesen kann ist klar im Vorteil!

1. C++ enthält keine Klassen, denn es ist ein Programmiersprache, man kann mit C++ Klassen schreiben
2. ATL, WTL sind auch nur weitere Framworks mit den man Windowsanwendungen unter Verwendung der Sprache C++ schreiben kann, was nicht heißt, dass man mit Standrad C++ Windowsanwendungen schreiben kann
3. Die MFC ist ein Wrapper für die WinAPI, denn es wurde eine Art Mantel um die WinAPI gelegt indem sie in Klassen zusammengefasst wurde
4. habe ich geschrieben, dass man mit der WinAPI Windowsanwendung schreiben kann
5. mit Standard C/C++ kann man keine Windowsanwendungen schreiben, denn wie Du schon richtig bemerkt hast braucht man dazu die WinAPI
6. behaupte ich jetzt, dass Deine Aussagen Käse sind!

[edit]
eh Du wieder der Meinung bist, dass ich Käse schreibe:
http://www.c-plusplus.de/forum/viewtopic.php?t=62651&start=0&postdays=0&postorder=asc&highlight=standard+c+fenster
http://www.c-plusplus.de/forum/viewtopic.php?t=46283&highlight=standard+c+fenster

Sascha Trowitzsch
30.06.2004, 14:08
Das ist doch Wortklauberei!

Wenn heutzutage von C++ die Rede ist, dann fängt man nicht an mit haarspalterischen Erörterungen, was jetzt die genauen Definitionen sind, sondern meint wohl eher ein konkretes C++-Produkt wie VC++ oder BC++, wobei man mit dem Borland-Produkt Windows-Fenster gleich graphisch erzeugen kann wie in VB6.

Ich hab auch nur was dazu gesagt, weil deine Antwort auf den Fragesteller im Verlaufs des Threads wohl eher verwirrt denn aufklärt...

Ciao, Sascha

Noodles
30.06.2004, 14:30
Respekt, dass solltest Du doch als Selbstständiger Entwickler etwas anderes sehen. Warum muss man, wenn man von C++ redet an Windowsprogramme denken? Man kann damit Schaltungen, Steuerungen, Treiber (ok das ist mehr C) usw programmieren.
Es ist mit Sicherheit KEINE Haarspalterei, denn Deine Aussagen waren falsch!
Man sollte schon wissen was man mit Standard C++ machen kann und was nicht, zumindest wenn man sich darüber äußert.
Ansonsten kannst Du ja mal im C++ Standrad die Stelle raussuchen, wo man Beispiele zur Erstellung eines Windows Fensters, Threads oä. findet.

Sascha Trowitzsch
30.06.2004, 16:01
Thanx an Stefan, dass er diesen Teil-Thread aus dem VB-Forum ( http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=131662 ) extrahiert hat.

Warum muss man, wenn man von C++ redet an Windowsprogramme denken?

Weil 1. der Fragesteller Windows-Programme programmieren wollte, und 2. dies ein MSOffice-Forum ist, was nahelegt, dass es hier weder um Maschinensteuerungen noch Linux geht. (Der Fragesteller wollte einen MP3-ID3-Editor produzieren, nä?)

Nebenbei Zitat aus der MSDN:
Zusammengenommen bilden die Klassen in der Microsoft Foundation Class Library (MFC) ein "Anwendungsgerüst" - das Gerüst, in dem Sie eine Anwendung für Windows erstellen können. Das Gerüst definiert auf einer sehr allgemeinen Ebene den Aufbau einer Anwendung und stellt Standardimplementierungen der Benutzeroberfläche zur Verfügung, die auf das Gerüst gelegt werden können.
...
Die Klasse CWnd ist die Basisklasse aller Fenster

Das ist also ein "WinAPI-Wrapper"??


Ciao, Sascha

Noodles
30.06.2004, 16:12
Original geschrieben von Sascha Trowitzsch
Weil 1. der Fragesteller Windows-Programme programmieren wollte, und 2. dies ein MSOffice-Forum ist, was nahelegt, dass es hier weder um Maschinensteuerungen noch Linux geht. (Der Fragesteller wollte einen MP3-ID3-Editor produzieren, nä?)

Darf man deswegen falsche Antworten geben?

Original geschrieben von Sascha Trowitzsch
[...]
Das ist also ein "WinAPI-Wrapper"??


Was willst Du mir mit dem Zitat und der Frage sagen?
Willst Du damit sagen, weil CWnd eine Basisklasse ist kann die MFC kein Wrapper sein oder was?

Du verstehst es nicht!
Die MFC ummanteln die WinAPI und verschleiern sie in Klassen, damit es einem Entwickler leichter fällt damit zu arbeiten.
CWnd ist z.B. eine Art Wrapperklasse die, die API Funktionen zum erstellen eines Fensters zusammenfasst und es somit einem Entwickler erleichtert ein Fenster zu erstellen.

Stefan Kulpa
01.07.2004, 07:15
Da meine Kenntnisse in VC++ nur eher rudimentär sind, habe ich einen der deutschen C++ MVPs zu Rate gezogen.

Meine Frage:
Kann man mit C++ OHNE Nutzung von MFC Windows-Programme schreiben?
Also quasi mit "plain C++" ohne jegliche Hilfsbibliotheken - so wie damals mit Ansi C. Ausgeschlossen sind dabei natürlich Datenbank-Programme, die entsprechende ADO- o.ä. Bibliotheken benötigen.

Seine Antwort:
...klar kann man das. Die Runtime-Bibliothek von MS mußt Du natürlich schon dazu linken, aber das war bei ANSI C (BTW, VC++ erlaubt nach wie vor auch das Schreiben von C-Programmen) ja nicht anders. Du wirst natürlich auch nicht um die Windows-API herumkommen und dafür werden dann auch diverse System-DLLs herangezogen. Aber ohne Fremdbibliotheken kann man durchaus auskommen.

Allerdings ist das Ganze dann doch relativ mühsam, da man sich um vieles selbst kümmern muß, was ein Framework wie MFC abfängt. Das unterscheidet sich auch nicht von Windows-Programmen in ANSI C, außer dass man einiges (aber nicht unbedingt die Window-Procs) Objekt-orientiert anlegen kann.

Die ursprüngliche Frage ist für mich damit beantwortet.
Die Frage, was die MFC denn jetzt ist, empfinde ich als eher müssig - auch diese Frage könnte ich bei den MVPs oder sogar bei MS klären lassen, aber das sind für mich Haarspaltereien; das Thema ist für damit abgeschlossen.

Gruß,

Noodles
01.07.2004, 10:03
Da steht es doch nocheinmal, dass man mit Standard C++ KEINE Windowsprogramme schreiben kann. Man braucht halt das WinAPI oder irgendwelche Libs dazu.
Das man Windowsprogramme ohne MFC schreiben kann ist ja klar, man hat ja noch die ATL, das reine WinAPI usw.

Sascha Trowitzsch
01.07.2004, 11:09
Sowas Hartnäckiges hab ich schon lange nicht mehr erlebt...

Du verstehst es nicht!
Die MFC ummanteln die WinAPI und verschleiern sie in Klassen, damit es einem Entwickler leichter fällt damit zu arbeiten.

Monsieur, ein Wrapper ist eine Schnittstelle, die es ermöglicht, auf Funktionen zuzugreifen, die ohne diese Schnittstelle entweder gar nicht oder nur mit hohem Aufwand zur Verfügung stünden. Es ist damit quasi ein Übersetzer.
Die MFC-Klassen sind aber mitnichten nur einfach Übersetzer von WinAPI-Funktionen, sondern enthalten jede Menge zusätzlicher Funktionalität. Oder wo siehst du in einer Klasse wie CDAODatabase irgendein Äquivalent zum WinAPI ??

...dass man mit Standard C++ KEINE Windowsprogramme schreiben kann. Man braucht halt das WinAPI ...

Und was ist C++ dann ohne Bezug zu einer realen Plattform, auf der es betrieben wird? Ein akademisches Konstrukt?
Wenn ich C++ auf Windows-Plattform betreibe, dann steht mir automatisch das WinAPI zur Verfügung und implizit kann ich damit Windows-Programme programmieren. Ich brauche auch keine weiteren Libs zu linken. Wenn eine Lib wie stdio dezidiert für Windows kompiliert ist, dann ist das eine Windows-(C++)-Lib.

Dieser Diskurs ist hier nun gut im C-Forum aufgehoben, vergiß aber nicht, was sein Ausgangspunkt war; meine Ausführungen hatten sich auf die Frage des VB-Neulings bezogen!

Ciao, Sascha

Noodles
01.07.2004, 11:31
Original geschrieben von Sascha Trowitzsch
Sowas Hartnäckiges hab ich schon lange nicht mehr erlebt...

Das hat nichts mit hartnäckig zu tun, man sollte nur gewissen Sachen richtig stellen, die Du falsch dargestellt hast. Wenn Du das als hartnäckig bezeichnest, dann hoffe ich, dass Du als selbstständiger Entwickler keine Lehrlinge ausbildest. Das soll nicht als Beleidugung verstanden werden.

Original geschrieben von Sascha Trowitzsch
Monsieur, ein Wrapper ist eine Schnittstelle, die es ermöglicht, auf Funktionen zuzugreifen, die ohne diese Schnittstelle entweder gar nicht oder nur mit hohem Aufwand zur Verfügung stünden. Es ist damit quasi ein Übersetzer.
Die MFC-Klassen sind aber mitnichten nur einfach Übersetzer von WinAPI-Funktionen, sondern enthalten jede Menge zusätzlicher Funktionalität. Oder wo siehst du in einer Klasse wie CDAODatabase irgendein Äquivalent zum WinAPI ??

Natürlich stellen die MFC zusätzliche Funktionalität bereit, das ändert aber nix daran, dass z.B. CWnd eine Wrapperklasse für die API Funktionen zum erstellen eines Fensters ist.

Original geschrieben von Sascha Trowitzsch
Und was ist C++ dann ohne Bezug zu einer realen Plattform, auf der es betrieben wird? Ein akademisches Konstrukt?
Wenn ich C++ auf Windows-Plattform betreibe, dann steht mir automatisch das WinAPI zur Verfügung und implizit kann ich damit Windows-Programme programmieren. Ich brauche auch keine weiteren Libs zu linken. Wenn eine Lib wie stdio dezidiert für Windows kompiliert ist, dann ist das eine Windows-(C++)-Lib.

Ist Plattformunabhängige Programmierung ein Fremdwort für Dich?
Das hat trotzdem nichts mit Deiner falschen Aussage zu tun, dass man mit Standard C/C++ Windowsprogramme schreiben kann.

Original geschrieben von Sascha Trowitzsch
Dieser Diskurs ist hier nun gut im C-Forum aufgehoben, vergiß aber nicht, was sein Ausgangspunkt war; meine Ausführungen hatten sich auf die Frage des VB-Neulings bezogen!

Deswegen kann man es ihm doch trotzdem richtig erklären.

khs-hh
01.07.2004, 12:00
ich verstehe zwar überhaupt nichts von C++ Programmierung, aber eine Aussage von Noodles ist so wirklich der größte Schwachsinn und deutet auf notorische Streitlust hin.

wie kann man die beiden Begriffe
Windowsprogrammierung und Plattformunabhängige Programmierung
in einen Zusammenhang bringen

scnr

Noodles
01.07.2004, 12:10
Original geschrieben von khs-hh
ich verstehe zwar überhaupt nichts von C++ Programmierung, aber eine Aussage von Noodles ist so wirklich der größte Schwachsinn und deutet auf notorische Streitlust hin.

wie kann man die beiden Begriffe
Windowsprogrammierung und Plattformunabhängige Programmierung
in einen Zusammenhang bringen

Kannst Du das auch begründen oder wolltest Du nur mal etwas Öl ins Feuer gießen?
Ich habe das auf eine Aussage von Sascha vorher bezogen die mit der C++ Programmierung zu tun hat.
Ich habe auch nicht Windows- und Plattformunabhängige Programmierung in Zusammenhang gebracht, wie kommst Du auf diesen Schwachsinn!?
Es gibg dabei immer um die Sprachee C++!
Also bitte erspare mir solche armseligen Aussgen, welche wohl eher auf Streitlust hindeuten.

Noodles
01.07.2004, 12:33
Ich denke es ist besser die Diskussion langsam einzustellen. Da nun Leute wie khs-hh anfangen hier zu heizen wird dieser Thread früher oder später mit Beleidigungen enden und das muss ja nicht sein.

@khs-hh
Falls Du fragen willst was ich mit heizen meine:

Du kommst hierein stellst eine Aussage von mir als Schwachsinn hin ohne irgendwie eine Begründung dafür zu liefern.
Da Du eh keine Ahnung von C++ hast (das hast Du ja selbst geschrieben), wirst Du hier (in diesem Thread) auch nicht vernünftig diskutieren können.

Sascha Trowitzsch
01.07.2004, 13:03
Du merkst eher nicht, dass du selbst anheizt: Mit notorischen Seitenhieben wie der Infragestellung meiner Kompetenz generell. ("Selbständiger Entwickler" ...)
Bis auf den Begriff "Käse schreiben" bin ich von Beleidigungen weit entfernt. Und Käse passte einfach gut zu Noodles ;)

Aber ich lasse dir nun das letzte Wort, das zweifelsohne noch kommen wird... :winken:

Ciao, Sascha

Noodles
01.07.2004, 13:12
Original geschrieben von Sascha Trowitzsch
Aber ich lasse dir nun das letzte Wort, das zweifelsohne noch kommen wird... :winken:

Da hast Du Recht, aber ich kann ja nicht wissen, dass Du nichts mehr sagen willst. :D

Original geschrieben von Sascha Trowitzsch
Du merkst eher nicht, dass du selbst anheizt: Mit notorischen Seitenhieben wie der Infragestellung meiner Kompetenz generell. ("Selbständiger Entwickler" ...)

Ich empfinde das nicht als heizen, denn ich bin der Meinung als Selbsts.... sollte man gewisse Sachen wissen. Ist eher harte Kritik bzw harter Diskussionsstil.
Ich wollte Dich damit nicht beleidigen oder so, falls es so rüber kam entschuldige ich mich dafür.

Original geschrieben von Sascha Trowitzsch
Bis auf den Begriff "Käse schreiben" bin ich von Beleidigungen weit entfernt.

Ich habe auch nicht behauptet das Du beleidigend bist.

Stefan Kulpa
01.07.2004, 15:01
In diesem Sinne - das war's dann wohl...

Der Beitrag wird geschlossen!

Gruß,