Probleme avec winmm.dll

Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010 - 14 avril 2009 à 10:09
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010 - 14 avril 2009 à 18:23
Salut,
Voila, j'utilise ce petit code pour recuperer la durée d'un son:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Function DureeFichier(sFichier As String) As Long
   'On crée un buffer de 128
   Dim sRetString As String * 128


   On Error Resume Next
   
   'on ferme fichier au cas où il serait ouvert
   mciSendString "close fichier", 0, 0, 0
   'on ouvre le fichier passé en paramètre
   mciSendString "open """ & sFichier & """ type MPEGVideo alias fichier", 0, 0, 0
   'on règle le format temporel sur milliseconde
   mciSendString "set fichier time format ms", 0, 0, 0
   'on récupère la durée du fichier dans le buffer
   mciSendString "status fichier length", sRetString, 128, 0
   'on passe cette durée à la fonction FormatTemps et on l'affecte à la valeur de notre fonction
   DureeFichier = CLng(Replace(sRetString, Chr(0), ""))
   'et enfin on ferme fichier
   mciSendString "close fichier", 0, 0, 0
End Function

le code marche tres bien mais quand je l'execute plus de 128 fois, il plante l'aplication et je n'arrive toujours pas a comprendre pourquoi.
Si quelqu'un pouvai m'eclairer sur ce probleme ou je bute depuis 2 jours.

Merci d'avance

2 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
14 avril 2009 à 13:15
Salut,
déjà pour avoir une idée du pourquoi ça plante, il faudra gèrer l' erreur.
Remplaces donc le On Error Resume Next par On Error GoTo Une_Etiquette, ou désactives la tout bêtement.
Deuxième chose, étant donné que le nombre 128 figure dans


   mciSendString "status fichier length", sRetString, 128, 0


La question est alors : A quoi correspond cet argument ?


Je connais pas grand chose à la chose, mais c' est juste pour t'orienter.




      
<hr />



[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
Luciol44 Messages postés 28 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 28 mars 2010
14 avril 2009 à 18:23
Merci pour ta reponse Libre_Max, le probleme n'est pas que le programe plante en lui meme, donc il ne genere pas d'erreur, mais c windows qui le plante. si non les 128 de la fonction "mcsiSenString" donne la taille du buffer.
Pour resoudre le probleme, j'ai limité l'appel de cette fonction a 127 fois. Normalement on doit jamais arriver a plus de 127 alors ca regle le probleme.
Merci a tous

PS: Si quelqu'un a quand meme une idée sur le pourquoi du comment ca plante je suis toujours prenneur
0
Rejoignez-nous