Lire un fichier xm

Signaler
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
Bonjour à tous,





J'aimerais savoir si il est possible de lire un fichier xm en C.


J'ai vu qu'il existait une librairie "mfmplayer.lib" qui peut être
utilisée depuis l'assembleur. Mais est-il possible de l'utiliser aussi
en C (sous Dev-C++ notamment)





J'ai essayé d'utiliser cette librairie mais je me heurte toujours à des
messages d'erreurs à la compilation (lorsque j'appelle une fonction de
la librairie) du genre :





[Linker error] undefined reference to `mfmPlay@4'





Si vous connaissez un lien où je pourrais trouver des infos je suis preneur.





Merci d'avance pour votre aide.

13 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Une lib dont on se sert en asm on s'en sert idem en C, faut bien spécifier la convention d'appel dans la déclaration des fonctions (__stdcall ou autre)..

ciao...
BruNews, MVP VC++
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Salut BruNews,



Je pense avoir bien fait les choses mais visiblement non.



J'ai mis dans les options de mon projet (Project option / Linker) la libraire mfmplayer.lib



Voila quelques morceaux de mon code:



extern "C" void STDCALL mfmPlay(VOID*); // Fonction dans la librairie



// Appel de la fonction de la librairie

LPVOID pMusic;

...

pMusic = GlobalAlloc(GPTR, nMusicSize + sizeof(nMusicSize));

...

mfmPlay(pMusic);

...



Lorsque je compile j'ai ceci comme erreurs :



Warning: .drectve `-defaultlib:\masm32\lib\user32.lib ' unrecognized

Warning: .drectve `-defaultlib:\masm32\lib\kernel32.lib ' unrecognized

Warning: .drectve `-defaultlib:\masm32\lib\winmm.lib ' unrecognized

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x1e):mfmplayer.asm: undefined reference to `waveOutRestart@4'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x35):mfmplayer.asm: undefined reference to `waveOutPause@4'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0xa2):mfmplayer.asm: undefined reference to `waveOutReset@4'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0xad):mfmplayer.asm: undefined reference to `waveOutClose@4'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x1f9):mfmplayer.asm: undefined reference to `waveOutOpen@24'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x460):mfmplayer.asm: undefined reference to `waveOutGetPosition@12'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x77f):mfmplayer.asm: undefined reference to `waveOutPrepareHeader@12'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x7c0):mfmplayer.asm: undefined reference to `waveOutWrite@12'

xm/mfmplayer.lib(mfmplayer.obj)(.text+0x864):mfmplayer.asm: undefined reference to `waveOutUnprepareHeader@12'

collect2: ld returned 1 exit status



make.exe: *** [test.exe] Error 1



Execution terminated



Et si je remplace STDCALL par CDECL j'obtient ceci comme erreurs :



main.o(.text+0x1fd):main.cpp: undefined reference to `mfmPlay'

main.o(.text+0x95f):main.cpp: undefined reference to `mfmPlay'



J'avoue être complétement bloqué là.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
je pensais à une lib de dll, assemble l'asm en dll avant et tu éviteras tous ces ennuis, tu obtiendras une lib utilisable facilement.
Faut aussi voir si ça vaut le coup, si tu as les fichiers asm, doit pas être grand-chose de transposer directement en C dans ton code.

ciao...
BruNews, MVP VC++
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Je n'ai pas le code source en assembleur. Juste la librairie (.lib et .inc.

Par contre j'arrive à utiliser cette libraire en assembleur mais comme
je suis plus à l'aise avec le C j'aurais voulu l'utiliser directement
depuis Dev-C++



Tu saurais comment faire ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
En plus c'est Dev-C++, tu cumules les handicaps...
Essaie en ajoutant une référence linker sur Winmm.lib, devrait aider.

ciao...
BruNews, MVP VC++
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Avec l'ajout de winmm.lib (récupérer dans mon dossier lib de masm32) ça semble compiler.



Cependant j'ai toujours des warnings:

Warning: .drectve `-defaultlib:\masm32\lib\user32.lib ' unrecognized

Warning: .drectve `-defaultlib:\masm32\lib\kernel32.lib ' unrecognized

Warning: .drectve `-defaultlib:\masm32\lib\winmm.lib ' unrecognized



Maitenant, c'est mon appli qui plante quand je l'exécute.

Je n'ai plus qu'a débuger et c'est pas gagné.



Sinon, tu n'aimes pas Dev-C++ ?

Que lui reproches-tu ?

Dans ce cas que me conseils-tu comme environnement de développement ?



Merci.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Pour coder du Windows rien de tel que Visual Studio.

ciao...
BruNews, MVP VC++
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Pour visual studio je suis d'accord mais il n'est pas gratuit



Sinon, mon programme plante sur l'appel à la fonction mfmPlay. Je ne vois vraiment pas comment je vais pouvoir débugger ça.



Je vais peut être abuser de ta patience mais si je t'envoi mes
fichiers, est-ce que tu pourrais y jetter un oeil (quitte à le faire
fonctionner sous VS) ?

Il y a un fichier C, RC (qui contient mon fichier xm) et puis les librairies.

Je ne me vexerai pas si tu refuses



Merci d'avance.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
pas le temps, désolé.

ciao...
BruNews, MVP VC++
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
ya une version étudiante gratuite pr VS

___________________________________________________________
Magicalement
Nono
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Salut magic_Nono,



Je ne suis plus étudiant depuis longtemps

Je crois en plus qu'elle ne dispose pas de l'IDE mais seulement du compilateur.

Je me trompe ?
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Skirby, moi aussi je suis étonné d'une version gratuite de VS...la seule version gratuite que j'ai de VC++ c'est une version qui m'interdit clairement ne serait-ce que de distribuer mes programmes gratuitement (on sent légèrement le capitalisme trop présent, c'est vraimant dommage) et qui intègre en + au moment de la compilation une messagebox qui me le rappelle! J'entends par là que chaque fois que je lançais un prog compilé ac ce VC++ ça affiché une messageBox() en Anglais précisant que c t illégal de redistribuer...enfin bref, perso je resterais sous Dev dans ces conditions surtout qu'il ne présente à mon gout en rien un handicap....

Sinon, pour ta question Skirby, je suis interessé par ton code : qu'est-ce qu'un fichier .xm ? Une extension spécialement inventée par toi ou c'est quoi? .xml je connais mais pas xm...
ça aurait pas un rapport avec du son ?? Je vois que tu as tenté de faire référence à des fonctions telles que wave_bidule... je serais interessé par ton code si tu as envie de me le montrer..jpourrais toujurs essayer de le compiler sous Dev chez moi..parfois c'est pas grand chose qui peut empecher une compilation et 2 esprits qui en cherchent la cause valent mieux qu'un

Sur ce, bonne soirée à tous

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Salut Gendal67,



C'est plutôt cool de ta proposition.

Je fais comment pour te les envoyer mes fichiers ?

Sinon envoie moi un message perso avec ton email et je te ferai parvenir mes fichiers.



A demain et bonne soirée à tous aussi