Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010
-
14 avril 2009 à 10:09
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 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.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 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