C'est encore moi, j'ai encore un ptt soucis avec un realloc voila mon code :
ca c'est ma fonction generale
BSTR __stdcall getTitre(BSTR *nomfichier)
{
char *valeur;
valeur=(char*)malloc(sizeof(char*)*60); // obliger de faire ca car le realloc ne marche pas
int taille;
double vers = versionID3(nomfichier,0);
if (vers == 1.1 || vers == 1) {
taille = getTitreV1((char*)nomfichier,valeur);// fonction qui appelle la fonction contenant le realloc
}
*nb = taille;
return SysAllocStringByteLen(valeur,taille);
}
/* retourne le titre du fichier mp3 pour la norme V1 */
int getTitreV1 (char* nomfichier, char* retour) {
return lectureTag(3,30,retour,nomfichier);
}
fonction contenant le realloc :
/*Lecture d'un morceau de fichier*/
int lectureTag (int debut, int longueur, char *valeur, char* nomfichier) {
FILE *fic;
fic=fopen(nomfichier,"r");
if (fic == NULL) {
exit(1);
}
int pos;
pos=128-debut;
fseek(fic,-pos,SEEK_END);
valeur=(char*)realloc(valeur,sizeof(char)*longueur);
fread(valeur,sizeof(char),longueur,fic);
fclose(fic);
return longueur;
}
Dc mon probléme est que si j'initialise la chaine que je renvoie à un caractere dans la fonction getTitre et que je fais ensuite un realloc sur cette chaine, coté vb ca marche plus.
Bout de code vb :
Option Explicit
Declare Function versionID3 Lib "d:\Essai.dll" (ByVal s1 As String, nb As Integer) As Double
Declare Function getTitre Lib "d:\Essai.dll" (ByVal s1 As String) As String
Declare Function getArtiste Lib "d:\Essai.dll" (ByVal s1 As String) As String
Declare Function getAlbum Lib "d:\Essai.dll" (ByVal s1 As String) As String
Declare Function getAnnee Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String
Declare Function getCommentaire Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String
Declare Function getGenre Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String
Sub Main()
Dim s As String
Dim nb As Integer
Dim tag As Double
s1 = "c:\9.mp3"
s = getTitre(s1, nb)
tag = versionID3(s1, 0)
Debug.Print s
Debug.Print tag
End Sub
voila le resultat : ! windir=C:\WIND
Alors j'aimerai savoir pk mon realloc ne marche pas car il me semble bien l'utiliser.
Merci de me repondre.