C++ natif Linux/Windows [Résolu]

Signaler
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
-
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour,

Ma question va peut-être vous paraître un peu idiote, mais je voudrais connaitre les différences  qu'il y a entre la programmation C++ native sous windows et celle sous Linux.

Je connais celle sous windows, utilisant les boucles de messages systèmes avec les deux fonctions WINAPI WinMain et le traitement des message LRESULT CALLBACK WindowProcedure.
Par contre, cela se passe-t-il de la même manière sous Linux ???
Je sais qu'en mode console, il n'y a pas vraiment de différences ormis le nom des libraries standard.

Mais en mode graphique, le système de message système se retrouve-t-il sous Linux ?

Merci

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"

19 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
C++ managé = C++.NET (le framework)
MFC = Surcouche. Encapsule l'API Win32. À ne pas apprendre si tu n'a pas de temps à perdre.

X-Window gère l'interface homme-machine sous Linux (et autre) donc le GUI. Programmer en Linux N'EST PAS la même chose qu'en Windows. Il y a certaines similitudes mais les API sont complètement différentes ce qui fait que la programmation l'est aussi.

C++ (@++)<!--
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
je crois que tu mélange un peu les langages et les APIs.

Avec le C++ tu peux coder des applications :

- Console
- Win32
- MFC
- QT
- GTK
- OpenGL
- DirectX
- SDL
- ...

Avec le C++/CLI ( anciennement appellé C++ .NET )

- Console
- Win32
- MFC
- QT
- GTK
- OpenGL
- DirectX
- SDL
- ...

+ en code managé :

- Console
- Win32 ( IJW ou P/Invoke )
- Windows Forms
- GTK#
- OpenGL ( avec des wrappers managés genre CsGL ..)
- Managed DirectX ( MDX, DirectShow.NET .. )
- SDL.NET
- XNA ( jeux Windows et XBOX 360 sous DirectX )
- WPF ( interface utilisateur sous DirectX )
- ...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Oui, utilise l'API Win32 sous Windows.

Sous Linux, ça dépend de ce que tu compte faire. Si c'est du C alors c'est GTK, car cette surcouche n'est pas objet. Si tu fais du C++, alors tu peux prendre Qt qui utilise des classes.

Mono est une implémentation libre du framework .NET.
C# != C++.
C# -> interprété (demande une machine virtuelle)
C++ -> natif (code directement exécutable)
Si tu veux faire du C#, tu n'est pas sur le bon site.
C'est deux mondes à part. Seule la syntaxe des langage se ressemble.

C++ (@++)<!--
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Sous Linux c'est QT ou GTK...

Neo_Fr
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Nan. Sous Linux c'est X-Window. Cependant, c'est assez complexe.
À la place, on utilise des surcouches pour simplifier la programmation.
Qt -> C++
GTK -> C

C++ (@++)<!--
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

merci,

oui, ça c'est pour les widgets graphiques, j'imaginais quand même pas retrouver le .NET sous Linux

Par contre, ma question s'oriente plus vers la structure du programme et la façon de gérer les messages systèmes,
je n'ai pas du tout programmé en C++ sous Linux avec donc, QT ou autres, et ce que je cherche à savoir, c'est si la structure de base d'un programme C++ sous Linux est la même que sous Windows, cad :

include



Init(){
  CreateWindow() // création d'une fenêtre QT sous Linux
  ShowWindow();
}

WINAPI WinMain(...,..,..){
  // dispatching des message systèmes
}



LRESULT CALLBACK WindowProcedure(HWnd,MSG,Param){
   switch(MSG){
      case WM_DESTROY : exit; break;
      case default:break;
   }
}

bref, peut-être qu'évidemment que oui, peut-être que non, mais je n'ai pour l'instant pas la possibilité d'essayer sous Linux et donc de répondre à ma question

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Oui et non.
Si tu veux une comparaison, cherche sur ce site des sources faites avec GTK ou Qt.

C++ (@++)<!--
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

ouay, en fait, la programmation C++ sous Linux ressemble plus à du Visual C++ et C++/MFC sous Windows, tout n'est que classe et héritage.
Petite précision quand même, est-ce cela que l'ont appelle C++ managé ???
parce qu'en fait, je dois faire une formation en développement, et je voulais demander dans une même formation d'apprendre le C++ natif sous windows (boucle de messages) et l'équivalent sous Linux, mais là, je crois que ça va être difficile. Enfin ce ne sont pas vraiment les même phylosophies.

Le C++ natif de Linux équivalent serait C++ avec X-Window si j'ai bien compris, ce qui complique un peu l'affaire, enfin, je ne sais, y a-t-il des exemples de programme C++ et X-Window ????

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Petite précision:
classe et héritage = POO (Programmation orienté objet)

C++ (@++)<!--
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

Merci

J'y vois un peu plus clair.
Effectivement, le pendant du C++ natif est bien X Window, j'ai regardé un peu, boucle de messages X et switch EventX...
maintenant faut voir ce qu'on peut faire avec du X Window et si c'est pas trop compliqué
Le rendu dépend totalement de la machine sur laquel s'execute le serveur X, par contre, il ne sert qu'a tracer des traits et autres, d'un côté, c'est bien, ça permet de faire des objets graphiques persos, mais par contre, il faut refaire tous les objets graphiques jusqu'au bouton si j'ai bien compris.

ça va peut-être être encore une question un peu idiote mais est-ce que X11 utilise ou peut utiliser de l'OpenGL ?
ça s'appelle pas XGL tout simplement ça ???

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
XGL



X Window est très compliqué. Je te conseille fortement d'utiliser une surcouche:
GTK -> C
Qt -> C++

C++ (@++)<!--
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
Je reponds à ton mp ici..

Le C++/CLI c'est une extension du C++, avec tu peux coder en natif et/ou en managé.

Win32. MFC, QT, X-Window c'est du C/C++ ( tout court, "natif" ). Ca veut dire qu'à la compilation tu vas obtenir un EXE qui contient du binaire natif dédié soit pour Linux soit pour Windows.

La compilation d'un code C# ou C++/CLI produit un EXE qui contient du IL, une sorte d'assembleur dédié soit pour  .NET soit pour MONO ( Linux ). Le IL ne peut pas être executé en tant que tel, il sera compilé au moment de l'execution par le framework. ( .NET utilise un compilateur Just-in-Time et non pas un interpreteur ). On dit que le code est managé car le framework, gère la compilation JIT, la securité, les erreurs, la mémoire etc..

Pour développer des interfaces graphiques en code managé sous Windows on utilise les Windows Forms, qui sont basées sur Win32 ou bien WPF basé sur DirectX. Sous Linux on utilise GTK# ( compatible aussi avec Windows ), il existe également une implementation partielle des Windows Forms.
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

Donc si je récatapitule :

C/C++ natif console Linux/Windows : int main(){....}
C/C++ natif interface graphique de base et peu moins évoluée
                                                Windows: programme basé sur le traitement des messages et composant graphiques de base
                                                                   WINAPI WinMain ... WndProc....
                                                                   CreateWindow()
                                                                   CreateWindowEx();
                                                 Linux: Là c'est X11, et à priori ça ressemble à :
                                                                   Fonction de traitement des message
                                                                   ProcXEvent(){}
                                                                   int main(){
                                                                      CreateSimpleWindow()... composants graphique inexistant ormis des droites des cercles, et des évênements...
                                                                    }
C++/MFC/CLI/QT interface graphique composants évolués et là c'est du C++ POO obligatoire
                     Là on travaille avec une surcouche du GUI qui gère les classes  et ça ressemble à:
                      //Nouvelle instance d'application
                      APP MyAPP::CDialog{
                        }
                      MyAPP::InitInstance(){}
                      MyAPP::OnButton(){}
                      Fonction de traitement des messages standard
                      MyAPP::MessageMap(){
                        ON_COMMAND(ID_Button,OnButton}
                      ....
                      }
                      Si on se base sur du MFC
            
   QT, ça ressemble à ça aussi, sauf que j'ai vu du use namespace quelque part qui me fait penser plus à du C++/.NET

et après, il y a le C++/.NET mais apparemment, c'est pas une solution très très simple, un peu bâtarde
et le vrai C++ Managé qui est le C# sous windows et, pour ma part, très équivalent à JAVA qui lui peut être utilisé sous Linux
using namespace system; ou std ....

C'est vraiment embêtant ces 36 façons de programmer en C++...
Moi perso, j'aime bien celui que je présente comme "C/C++ natif interface graphique Windows" car tu sent vraiment que tu es au niveau de l'OS, par contre l'équivalent sou Linux est difficilement pensable, X11 compliqué
Maintenant, au niveau de la gestion des évênements, je crois qu'avec C++/MFC et des HOOK, on peut récupérer la gestion complète des évênement que l'on avait avec les messages du C++ natif, mais est-ce bien vrai, est-ce aussi puissant ???
Sinon, pour la programmation graphique OpenGL/DX, j'ai vu qu'ils utilisent beaucoup le C++ natif ou directement le C#/JAVA sous windows. Sous Linux, j'imagine qu'ils doivent utiliser QT, ou GTK, donc le code est différent de toute façon...

Donc tout ça, c'est ce qu'on appelle du C++ ????
Lequel est le vrai C++ d'avant, le vrai d'aujourd'hui, le pure et dûr ????
Celui qui permet de faire le plus de chose, du bas niveau au haut niveau, bref le plus complet ???

N'hésiter pas à me corriger si j'ai dis des bétises, j'ai d'ailleurs poster ce message pour ça :o)

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
"Lequel est le vrai C++ d'avant, le vrai d'aujourd'hui, le pure et dûr ????"

Le vrai C++, c'est le C++.
Pas le C++/CLR (C++.NET) ni le C# ni rien de tout ça.

En passant, on peut faire du très bas niveau (driver, voir même OS) avec le C. Attention, j'ai bien dit C et non C++.

MFC, SDL, GTK sont tous des surcouches.

Les MFC sont simplement des classes. Si tu travail avec les MFC, tu fais tout de même du C++ mais non natif car tu utilise une surcouche qui encapsule toute l'API.
(N'apprend pas les MFC, c'est une perte de temps, car il faudra bien s'en passer un jour ou l'autre et quand ce moment viendra, tout cette apprentissage ne t'aura servie à rien. Tu devra tout réapprendre.)

GTK est aussi une surcouche. Elle permet de ne pas être obliger de programmer directement en X11 ou faire du code portable au niveau de l'interface graphique.

Si tu veux faire du vrai natif, utilise les API de l'OS.
Maintenant, sous Linux, si tu désire faire du natif pure, et bien utilise X11 mais je ne te le conseille pas. Ici, on peut faire une exception et utiliser une surcouche à ce niveau.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ah et oui, avant que l'on me le dise, je sais ce que code natif veut vraiment dire.
Cependant, j'ai pour définition qu'un code natif doit aussi être sans complément le plus souvent inutile (MFC, string, stream etc.).

C++ (@++)<!--
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

OK, je vois

Donc pour faire du C++ "natif" graphique qui sert à quelque chose sous windows, c'est donc C++ utilisant l'API Win32 ?
En managé, c'est C#

Et sous Linux, tu conseil quelle alternative GTK ou QT ??? qui sont des surcouches géré comme des classes
Pour le managé, il y a MONO ou des truc comme ça, mais ça je connais pas
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

Oui, désolé pour le "C#", j'ai pas l'habitude d'être grossier

Merci beaucoup pour votre patience SAKingdom et Lutinor, maintenant, au moins, j'ai une idée de ce que je veux faie avec les bonnes notions, ça m'évitera de passe pour un .............. débutant la prochaine fois

@ bientôt je pense

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

SAKingdom: Les MFC sont simplement des classes. Si tu travail avec les MFC, tu fais tout de même du C++ mais non natif car tu utilise une surcouche qui encapsule toute l'API.

NitRic: C'est faux. La librairie MFC (Microsoft Foundation Classes) a été développé en C++, c'est donc du « natif ». Même chose pour QT/GTK/etc. qui ont été développés en C et/ou C++, et par conséquent, c'est aussi du « natif ». Au final (après compilation), on obtient un code natif, exécuté directement par le processeur, sans intermédiaire comme le C#/Java/etc.

SAKingdom: Si tu veux faire du vrai natif, utilise les API de l'OS.

NitRic: C'est faux. Je peux très bien développer une librairie quelconque en C ou en C++ pour faciliter l'utilisation de certaines API du système d'exploitation par exemple, mais le résultat final (le programme obtenu après compilation) contient du « code natif ».

Tout le monde sait que les systèmes d'exploitation tels que Windows/Linux/MacOS/etc. ont été développés en ASM/C/C++ principalement. Leur API à donc été développé dans ces langages, évidemment. Si on utilise l'ASM, le C et/ou le C++ pour développer une librairie quelconque (comme QT/GTK/MFC/etc.) sous l'un de ces systèmes, ca ne change rien, ca reste du « natif ».

Donc, que RV2931 utilise MFC (sous Windows), GTK/QT/etc. (sous Linux ou autres), après compilation, il va obtenir du code « natif ».

Ca ne dépend pas de la libraire qu'on utilise mais plutôt du langage utilisé.

Lutinor a raison, RV2931 mélange les langages et les API's/libraires/etc. Les langages sont à la base de toutes ces choses. On développe des API's/libraires/etc. en utilisant un(des) langage(s) X (Y et/ou Z).

~(.:: NitRic ::.)~
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Tu n'as pas tout lu.

Oui, ça générera un code exécutable natif mais je ne parlais pas du code généré.
Je parlais du code source.

"

Ah et oui, avant que l'on me le dise, je sais ce que code natif veut vraiment dire.
Cependant,
j'ai pour définition qu'un code natif doit aussi être sans complément
le plus souvent inutile (MFC, string, stream etc.)."

C++ (@++)<!--