none
Accès à l'API MIDI sous Visual C++ 2010 et MFC . Demande d'AIDE RRS feed

  • Question

  • Sous Windows XP et Visual Studio C++ 6.0  j'ai développé un gros volume de programmes (6000 heures de développement environ).
    Ces programmes ont donné lieu à un Produit (cf: http://www.pianotrainer.com qui donne lui-même satisfaction.
    Ces programmes utilisent de façon étroitement liée : Les MFC et l'API  low level MIDI (midiSQtreamOpen, ...Out, etc...).

    Voulant réaliser le port de ce produit sur Windows7 et Vista en utilisant Visual C++ 2010 j'ai réalisé un petit extrait (tout simple) de ces programmes et je l'ai généré sous Visual C++ 2010 sous la forme d'une Application MFC.
    Résultat: génération OK, exécution OK (en particulier tous les retours de l'API MIDI retournent MMSYSER_NOERROR)
    PROBLEM:
    Le  .exe   correspondant exécuté sous XP  fait entendre la mélodie définie statiquement dans le programme.
    Le  .exe   exécuté sous Vista et/ou Windows7 s'exécute bien avec le même timing mais SANS PRODUIRE LE SON DES NOTES.

    J'ai prototypé en recherchant toutes les formes de structure possibles pour cette l'appli ... avec ou sans .dll produite sous Visual C++ 6.0 et/ou sous Visual C++ 2010, rien n'y fait : si l'api  MIDI est exécutée sous une appli produite sous VisualStudio C++ 2010 utilisant les MFC le son ne sort que sur les machines XP.
    J'ai cherché en vain s'il existait différents  mmsystem.lib  (librairie qui inclut l'API MIDI sous Visual C++) et je n'en ai pas trouvé.
    J'ai fait tourner une appli MIDI en C++  générée sous Visual C++ 2010 et n'utilisant pas les MFC: elle fonctionne.

    J'ai beaucoup de mal à me convaincre que Microsoft abandonne à ce point les développeurs MFC après avoir tant vanté les avantages de ce type de développement.

    J'ai également beaucoup de mal à accepter de mettre à la poubelle les 6000 heures de développement de PianoTrainer .

    Conclusion: J'en appelle à l'aide des développeurs MIDI ayant l'expérience:    MIDI  C++ sous MFC

    ======================================= 

    Suite aux réponses de P Morel-Fourrier et Paul Bacelar que je remercie :

    Oui, je peux transmettre les sources Visual C++ 2010 de l'application minimum mettant le problème en évidence, via  http://dl.free.fr  si vous me donnez une adresse email de notification.

    • Modifié VicusVici lundi 14 novembre 2011 16:06
    jeudi 10 novembre 2011 14:30

Réponses

  • Bonjour,

    Eh bien voici un défi intéressant : faire migrer une appli conséquente développée avec Visual C++ 6 (il y a une dizaine d'année à priori) vers Visual Studio 2010 et Windows 7.

    Le problème est que Windows aussi bien que Visual C++ (et les MFC) ont beaucoup changé en 10 ans. 10 ans, c'est très vieux dans l'informatique. Il est quasiment certain que plusieurs problèmes de compatibilité devront être résolus, ça ne se fera pas tout seul. L'un des problèmes'étant que les notes ne sont pas jouées sous Windows 7.

    Je ne crois pas que les MFC soient la cause du problème, et qu'elle empêchent les notes de produire un son. L'API MIDI de MMSYSTEM et les MFC sont deux librairies distinctes. Pourquoi l'utilisation des MFC empêcherait MMSYSTEM de fonctionner correctement ? Mais vous avez peut-être une bonne raison d'affirmer cela ?

    OK le programme C++ sans MFC fait de la musique, et celui avec les MFC n'en fait pas.

    Peut-être pouvez-vous détailler comment vous avez construit l'appli MFC toute simple qui ne fonctionne pas correctement, et montrer un peu de code ?

     

    • Marqué comme réponse VicusVici lundi 14 novembre 2011 15:28
    jeudi 10 novembre 2011 21:23
    Auteur de réponse
  • Cela fait bien longtemps qui je ne fais plus activement des MFC et du MIDI mais les MFC ont la fâcheuse tendance à "pirater" la pompe à message des fenêtres.

    Des API peuvent avoir besoin de "pirater" eux aussi la pompe à message ou ne pas supporter ce type de piratage.

    Les MFC ont évolués et peuvent rendre des API inopérantes.

    Pouvez-vous nous fournir un projet VS minimaliste ayant ce problème ?


    Paul Bacelar, Ex - MVP VC++
    lundi 14 novembre 2011 11:47
    Modérateur

Toutes les réponses