begin process at 2012 05 29 07:08:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Multimédia

 > 

Informations Media


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Informations Media

lundi 21 février 2005 à 16:05:50 | Informations Media

simtiers

Salut !

Je suis en train de faire un mini lecteur avec FMOD, sous Windows.
Dans ma classe CLecteur, interface avec FMOD, je récupère les tags avec FSOUND_Stream_GetTagField, masi j'ai une erreur 0x0005 qui apparait (violation d'accés)

Voici le code :
bool CLecteur::Recuperation_Informations( INFORMATIONS_PISTE* Infos )
{
    int NbChamps = 0;
    if( !FSOUND_Stream_GetNumTagFields( Son, &NbChamps ) )
        return false;
   
    if( NbChamps == 0 )
        return false;

     char *Nom_Champ;
    int type_tag = 0;
    int len = 0;
    void* Val_Champ;

    memset( &Infos, 0, sizeof(INFORMATIONS_PISTE) );

    for( int i=0; i<NbChamps; i++ )
    {
        FSOUND_Stream_GetTagField( Son, i, &type_tag, &Nom_Champ, &Val_Champ, &len );

        MessageBoxA( NULL, (char*)Val_Champ, "Val Champ", 0 );
       
        // Titre
        if( !strcmp(Nom_Champ,"TITLE") )
            strncpy( Infos->Titre, (char*)Val_Champ, len );
        // Album
        if( !strcmp(Nom_Champ,"ALBUM") )
            strncpy( Infos->Album, (char*)Val_Champ, len );
        // Artiste
        if( !strcmp(Nom_Champ,"ARTIST") )
            strncpy( Infos->Artiste, (char*)Val_Champ, len );
        // Année
        if( !strcmp(Nom_Champ,"YEAR") )
            strncpy( Infos->Annee, (char*)Val_Champ, len );
        // Commentaire
        if( !strcmp(Nom_Champ,"COMMENT") )
            strncpy( Infos->Commentaires, (char*)Val_Champ, len );
    }
    return true:
}




La structure d'infos :
struct INFORMATIONS_PISTE
{
    char Album[50];
    char Artiste[50];
    char Titre[50];
    char Commentaires[100];
    char Annee[5];
    char Piste[5];
    char Duree[10];
};


J'ai vérifié, le void* Val_Champ renvoie une chaine de caractère (toujours), mais je ne peux pas utiliser directement char* Val_Champ, je ne sais pas comment faire

Merci de répondre !
lundi 21 février 2005 à 19:33:44 | Re : Informations Media

AlexMAN

Membre Club
Il faut allouer de la memoire !!!! De facon dynamique (malloc) ou pas !
Declare en char*, et caste quand il le faut.

FSOUND_Stream_GetTagField( Son, i, &type_tag, &Nom_Champ, &Val_Champ, &len );

Pour passer Val_Champ en parametre, tu fais soit &Val_champ[0], ou bien Val_champ tout court. Idem pour les autres variables (je parle des tableaux.)


+2(p - n)
lundi 21 février 2005 à 20:06:36 | Re : Informations Media

simtiers

J'ai essayé de faire un cast; mais j'obtiens toujours la même erreur, en faisant comme ça :

char *Nom_Champ;
char *Val_Champ;
int type_tag = 0;
int len = 0;

memset( &Infos, 0, sizeof(INFORMATIONS_PISTE) );

 for( int i=0; i<NbChamps; i++ )
{
    FSOUND_Stream_GetTagField( Son, i, &type_tag, &Nom_Champ, (void**)&Val_Champ, &len );

    ...
}
...

Il ne faut pas allouer la memoire, voici le contenu de l'aide la fonction :

signed char F_API FSOUND_Stream_GetTagField(
FSOUND_STREAM *stream,
int num,
int *type,
char **name,
void **value,
int *length
);

Parameters

stream The stream to get the tag field from.
num The number of the tag field to retrieve.
type Pointer to a variable that will receive the type of the tag field that was retrieved. See FSOUND_TAGFIELD_TYPE.
name Pointer to a variable that will receive the name of the tag field as a null-terminated ASCII string.
value Pointer to a variable that will receive a pointer to the tag field data.
length Pointer to a variable that will receive the length of the tag field data.

Do not attempt to modify or free any pointers returned by this function
If this function returns successfully, "value" will contain a pointer to a piece of tag-field-specific data - do not assume it will always point to a null-terminated ASCII string.
lundi 21 février 2005 à 20:29:09 | Re : Informations Media

simtiers

Comme ça non plus, ça ne marche pas :

char *Nom_Champ;
     void *Val_Champ;
    int type_tag;
    int len;
   
    Buffer = new char[2048];

    memset( &Infos, 0, sizeof(INFORMATIONS_PISTE) );

    for( int i=0; i<NbChamps; i++ )
    {
        FSOUND_Stream_GetTagField( Son, i, &type_tag, &Nom_Champ, &Val_Champ, &len );

        sprintf( Buffer, "%s", Val_Champ );
        //MessageBoxA( NULL, (char*)Val_Champ, "Val Champ", 0 );
       
        // Titre
        if( !strcmp(Nom_Champ,"TITLE") )
            strncpy( Infos->Titre, (char*)Buffer, len );
......

Buffer étant une variable globale.
lundi 21 février 2005 à 20:34:20 | Re : Informations Media

simtiers

JE VIENS D'IDENTIFIER L'ERREUR !!!

ça viens de
Infos->Titre et tout ce qui est Infos->, je ne sais pas pourquoi...
lundi 21 février 2005 à 20:43:31 | Re : Informations Media

simtiers

Réponse acceptée !
Ca y est, j'ai trouvé !
C'était un pb avec les allocations successives (je pense) et le passage du pointeur sur
Retour_Infos en argument

Pour ceux que ça interesse :

bool CLecteur::Recuperation_Informations( INFORMATIONS_PISTE* Retour_Infos )
{
    int NbChamps;
    char *Nom_Champ;
     void *Val_Champ;
    int type_tag;
    int len;
    char Tampon[512];
    INFORMATIONS_PISTE Infos;

    if( !FSOUND_Stream_GetNumTagFields( Son, &NbChamps ) )
        return false;
   
    if( NbChamps == 0 )
        return false;

    memset( &Infos, 0, sizeof(INFORMATIONS_PISTE) );

    for( int i=0; i<NbChamps; i++ )
    {
        FSOUND_Stream_GetTagField( Son, i, &type_tag, &Nom_Champ, &Val_Champ, &len );

        //MessageBoxA( NULL, (char*)Nom_Champ, "Nom Champ", 0 );
       
        // Titre
        if( !strcmp(Nom_Champ,"TITLE") )
            strncpy( Infos.Titre, (char*)Val_Champ, len );
        // Album
        else if( !strcmp(Nom_Champ,"ALBUM") )
            strncpy( Infos.Album, (char*)Val_Champ, len );
        // Artiste
        else if( !strcmp(Nom_Champ,"ARTIST") )
            strncpy( Infos.Artiste, (char*)Val_Champ, len );
        // Année
        else if( !strcmp(Nom_Champ,"YEAR") )
            strncpy( Infos.Annee, (char*)Val_Champ, len );
        // Commentaire
        else if( !strcmp(Nom_Champ,"COMMENT") )
            strncpy( Infos.Commentaires, (char*)Val_Champ, len );
        /*else
            continue;*/
           
        //MessageBoxA( NULL, Tampon, "Val Champ", 0 );
    }
    memcpy( Retour_Infos, &Infos, sizeof(Infos) );
    return true;
}



Cette discussion est classée dans : champ, infos, char, val, len


Répondre à ce message

Sujets en rapport avec ce message

conversion char to TBint32 [ par gab55 ] Bonjour a tous je suis débutant en c++ et j'utilise une fonction qui lit des données dans un fichier texte mon probleme est que les données contenues Char* capricieux.... [ par Clonk ] Bonjour,alors voilà, j'ai une classe "Champ" avec les attributs suivant :private: char * _nomchamp; char * _explication; char * _type; char * _format; Fonction substr en C [ par julien_boss ] Bonjour,j'ai codé cette fonction, sensée être l'équivalent de string::substr(...) en C :char * StrSub(const char *s, int pos, int len){    char *ps = Pb de compilation (error C2593: 'operator <<' est ambigu) [ par nanou_26 ] J'obtient une erreur de compilation "error C2593: 'operator T m_va Arbre Lexicographique [ par LordBob ] Bonjour a tous,voila en fait j'ai un exercice d'algorithmique ou je dois créé un arbre l'exicographique, voici la structure de ma classe:class ArbreLe fonction qui crash à retardement [ par clad67150 ] Bonjour à tous !Je viens poster parce que j'ai un petit problème, j'essaye de faire une fonction de debug qui marche comme un printf() et qui affiche Url encoding [ par Lestat_2070 ] Bonjour à tous,Tout d'abord, j'espère que je ne me trompes pas de section, pour ce sujet. Ensuite, j'essaye de faire une fonction comparable à la fonc votre avis sur une fonction de split... [ par Matt67 ] Bonsoir,Je dois faire une fonction de "splitage" de chaine. J'ai realisé ce bout de code et j'aimerais votre avis. La fonction n'est pas tout a fait f Lecture d'un fichier avec decoupe de chaine. [ par macbang ] Bonjour, je reviens vers vous pour un problème que j'ai du mal a résoudre.Mon programme ouvre un fichier, le but étant de découper ligne par ligne pou [C++] Violation d'accès lors de la lecture de l'emplacement 0xfdfdfdfd. [ par 3Fred9 ] Bonjour, J'ai changé de compilateur de Visual C++ 6 à Visual Studio 2005 et depuis j'ai une fonction qui plante à l'exécution par une violation d'acc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales