JOUE UNE NOTE EN MIDI EN C++ SOUS VISUAL STUDIO

gillig Messages postés 32 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 décembre 2003 - 28 avril 2003 à 15:25
gillig Messages postés 32 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 décembre 2003 - 28 avril 2003 à 15:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10667-joue-une-note-en-midi-en-c-sous-visual-studio

gillig Messages postés 32 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 décembre 2003
28 avril 2003 à 15:25
Je ne suis pas allé jusqu'à entendre un son midi, mais voici ce que j'ai trouvé en tentant de compiler et en examinant le code.

Les erreurs de compilation :
- il manque 2 parenthèses au constructeur ClsDlgJouer dans le .cpp
- la définition (.h) de ce même constructeur n'est pas bonne : enlever l'argument
- dans ClsDlgJouer::DlgProc : un objet ClsDlgJouer ne possède effectivement pas de méthode JouerNotes, un objet ClsJouer, oui.
- dans clsMain.cpp, JouerNotes() doit prendre l'argument hWnd

Qq remarques pour améliorer tout ça :
- d'une manière générale, il faut initialiser les données membres de tes classes grâce à leur constructeur : ClsJouer::ClsJouer() : DlgJouer(NULL) {}
- les données membres ClsDlgJouer *DlgJouer et ClsJouer *versLaMusic sont déclarées mais utilisées nulle part ! D'ailleurs je ne comprends pas l'utilité (théorique) de ces pointeurs. A quoi cela sert-il que chaque instance de l'un des 2 classes connaisse une instance de l'autre classe ? Le mieux serait sans doute de supprimer les pointeurs et de faire dériver ClsDlgJouer de ClsJouer.
- le bool "Sortie" ne sert à rien, il est affecté, mais jamais utilisé !
- dans clsMain::MainWndProc, je n'ai pas vérifié, mais il me semble que le pointeur "clsMain *lpMe" est inutile, puisqu'il devrait s'agir en principe de l'instance qui execute cette méthode (c'est à dire lpMe = this).
- autre chose que je n'ai pas vérifié, mais qui me semble louche a priori, le new clsMain(...) dans la fonction WinMain : qui se charge de faire le delete correspondant ?
- La méthode Lance() pourrait être décomposée en une méthode Initialisation() et une méthode BoucleMessage(), qui ont le mérite de séparer deux fonctionnalités différentes, et d'avoir des noms plus explicites.
- dans la classe clsMain, il y a un new du pointeur Music dans le constructeur, et un delete dans le destructeur. Pourquoi ne pas utiliser plutôt directement un objet ClsJouer au lieu d'un pointeur (surtout que ClsJouer a un constructeur par défaut) ?

Qq remarques de présentation :
- rien ne sert de passer autant de lignes, ça rallonge trop les sources, ça oblige à scroller un max, et c'est moins lisible...
- adopter des conventions de nommage plus strictes, on ne différencie pas les méthodes des données, par exemple...
- les commentaires ne correspondent pas toujours au code, mieux vaut ne pas en mettre du tout que de mettre des commentaires faux, selon moi...

Voilà, il y aurait peut-être d'autres choses à dire, mais je trouve que c'est déjà pas mal ;-)
J'espère que ça t'aura aidé, bon courage.
Rejoignez-nous