RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016
-
3 oct. 2007 à 16:45
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
7 oct. 2007 à 20:53
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"
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 oct. 2007 à 23:50
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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 oct. 2007 à 17:06
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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 oct. 2007 à 19:53
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
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 3 oct. 2007 à 19:54
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"
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 3 oct. 2007 à 20:39
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"
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 4 oct. 2007 à 00:05
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"
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 4 oct. 2007 à 08:19
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.
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 4 oct. 2007 à 10:22
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"
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 oct. 2007 à 13:39
"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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 oct. 2007 à 13:50
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.).
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 4 oct. 2007 à 16:46
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
RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016 4 oct. 2007 à 17:27
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"
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 7 oct. 2007 à 19:18
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).
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 7 oct. 2007 à 20:53
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.)."