IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Problème d'écriture dans un tableau


Sujet :

MFC

  1. #21
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Bon eh bien si je me fie à toi, le résultat est clair:

    Cette fonction ne peux pas marcher!

    La voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    /*Les variables de la fonction*/
    unsigned long dwCookie;
    DWORD RetourPW;
    unsigned long dwType = 1;
     
    wchar_t phrase2[5]; 
    wcscpy(phrase2,L"-30"); 
     
    const wchar_t *strwavefile = phrase2;
     
    /*Définition et utilisation de la fonction (c'est une fonction de Dll)*/
     
    typedef unsigned long (WINAPI *DLL_Function_AGPS6_PlayWave) (unsigned long, const wchar_t*, unsigned long);
     
    LPCTSTR FonctionSon = _T("AGPS6_PlayWave") ;
     
    DLL_Function_AGPS6_PlayWave PlayWave;
     
    PlayWave = (DLL_Function_AGPS6_PlayWave)GetProcAddress(hDLL, FonctionSon);
     
    RetourPW = PlayWave(dwCookie, strwavefile, dwType);
    Voila j'ai mis tout le contenu de la fonction avec ses variables et sa constante.

  2. #22
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Bonjour,

    Tu peux aussi faire comme ça pur obtenir un wchar_t :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    wchar_t  phrase2[6];
    char     buff[6]; 
     
    memset(phrase2,0,sizeof(wchar_t)*6);
    memset(buff,0,sizeof(char)*6);
     
    buff[0] = '0';
    buff[1] = '-';
    buff[2] = '2';
    buff[3] = '3';
    buff[4] = '4';
     
    ::MultiByteToWideChar(CP_ACP, 0, buff, -1, phrase2, 6);
    Dans l'appelle de ta fonction PlayWave le deuxième paramètre semble être le chemin d'un fichier alors pourquoi veux-tu lui passer des valeurs numériques ?

  3. #23
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Il est en effet possible de lui passer un nom de fichier,

    Cela dépend de la valeur fixée en troisième paramètre (dwType),

    Pour dwType = 1 =>

    Le deuxième paramètre est utilisé comme un tableau de wchar_t dans lequel chaque occurence correspond à un son particulier à jouer, exepté le '0' qui indique la fin du tableau.

    Pour dwType = 2 =>

    Le deuxieme paramètre est utilisé comme un pointeur vers une string puis un TTS (Text-To-Speech engine) permet de lire "a haute voix" cette string.

    Pour dwType = 4 =>

    Le deuxième paramètre est utilisé comme on pointeur vers un nom de fichier .wav à lire.

    J'ai déja testé les 2 autres mode (2 et 4) mais le résultat était le même => pas de son audible...

  4. #24
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    J'ai un petit problème par rapport à ton code:

    sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::MultiByteToWideChar(CP_ACP, 0, buff, -1, phrase2, 6);
    Que dois-je mettre devant les '::' ?

    J'ai testé le nom de ma classe/Dialog-box, mais le compilateur me dit que cette fonction ne fait pas partie de cette classe :

  5. #25
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    C'est une fonction système.
    Ttu n'as pas besoin de mettre :: devant c'est juste pour être plus clair.

    Cette fontion est définie dans winnls.h, fichier inclu par windows.h qui lui même est inclu par les MFC si tu les utilises.

  6. #26
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Brouzouf t'aideras surement mieux que moi ..
    meme si je trouve cracra d'utiliser memset dans ton cas ..

    mais bon, si le type qui a ecrit cette fonction attribue un son par valeur d'un tableau de wchar_t, c'est que la plage de sons représentés par des caractères numériques va de 1 à 9 .. c'est mon avis en tout cas

    bon courage :)

  7. #27
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    toutes ces méthodes sont des équivalents pour construire un wide char.

    Mais il faut savoir quoi y mettre dedans pour que la fonction sache l'interpréter. Ce n'est plus un problème syntaxique, mais bel et bien un problème sémantique. Et là, a part en ayant une boule de cristal, on peut pas deviner comment fonctionne ta fonction dans la dll

  8. #28
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Citation Envoyé par CTux
    Brouzouf t'aideras surement mieux que moi ..
    meme si je trouve cracra d'utiliser memset dans ton cas ..

    mais bon, si le type qui a ecrit cette fonction attribue un son par valeur d'un tableau de wchar_t, c'est que la plage de sons représentés par des caractères numériques va de 1 à 9 .. c'est mon avis en tout cas

    bon courage
    En fait les valeurs sont défini de -48 à +bcp,

    une valeur négative fait référence à un son précis, par exemple -3 fait reférence au son FINISH.wav => une petite voix dit "vous êtes arrivé à destination",


    Dans le cas d'une valeur positive, par exemple 10, la petite voix dira "10",
    donc en gros si dans mon tableau je mets "10, -7, 0"
    la valeur -7 référent à Km, la petite voix me dira "10 km".

    Citation Envoyé par nico-pyright(c)
    Ce n'est plus un problème syntaxique, mais bel et bien un problème sémantique. Et là, a part en ayant une boule de cristal, on peut pas deviner comment fonctionne ta fonction dans la dll
    Je suis actuellement en train de blinder de mail le support technique de la société qui a produit le soft que j'essaie de piloter à l'aide de la fonction PlayWave() (cette société a produit un SDK Software Developpement Kit qui permet de piloter leur soft, la fonction PlayWave est une de ce SDK)

  9. #29
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    En fait j'ai l'impression que cette société à fait une erreur dans la déclaration de cette fonction, car j'ai déja été confronté à des problèmes avec une autre fonction, et après un mail il mon répondu très vite m'indiquant la solution à ce problème,

    Cette foi, ils sont très long !!
    De plus le fait qu'il soit "impossible" de mettre une valeur négative dans ce tableau conforte mon opinion, mais bon la on s'écarte du sujet

  10. #30
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ce qui serait logique, ca serait un tableau de nombre, des entiers par exemple

  11. #31
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Non je ne pense pas qu'il aurait fallu un tableau de nombre puisqu'il peut jouer un fichier avec cette fonction.


    Par contre si tu doit passer des nombres, qu'est-ce qui t'empêche de te faire une chaine avec des nombres et de la transformer en wchar_t par la suite ?

    Ca devrait marcher non ?

  12. #32
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    En fait j'ai commencé a m'orienté vers le premier mode, car si je lui passe le nom d'un fichier son, je ne sais pas ou mettre ce fameux .wav, dans le même rep que mon exe ou le rep du logiciel que je pilote

    Mais bon dans le doute je l'ai mis au deux endroits

    Sinon ton histoire de trans-typage de char* en wchar_t me botte, je vais tenter ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *phrase = {"-3", "0"};
    const wchar_t *strwavefile = (wchar_t)phrase2;
    Mais je suis pas sur de moi ^^

  13. #33
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Je l'ai modifié comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tab[] = {-3, 0};
     
    	wchar_t plop = (wchar_t)tab;
     
    	const wchar_t *strwavefile = &plop;
    Ca passe à la compile, mais toujours pas de son

  14. #34
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    char *phrase = {"-3", "0"};
    -> ne serais tu pas en train d'essayer de coller 2 chaines dans une ? ...

    char tab[] = {-3, 0};
    -> tjs pareil, tab[0] ne va retenir que le caractère '-'

    ca ressemble à une grosse impasse ton truc :|

  15. #35
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Ok je veu bien te croire, mais je sais pas trop koi mettre dotre ...

    Toré rien a proposer ?

  16. #36
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par défaut
    Tu n'as pas le droit de faire ce que tu fais, un char ne peut avoir la valeur -3.

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CString cs_Temp = "-3";
    int nTailleWChar = cs_Temp.GetLength() * sizeof(char) * 2 + 1;//+1 pour mettre un 0 a la fin
    wchar_t wchar[nTailleWChar];
     
    ::memset(wchar,0,nTailleWChar);
     
    ::MultiByteToWideChar(CP_ACP, 0, cs_Temp.GetBuffer(cs_Temp.GetLength() ), -1, wchar, nTailleWChar);
    cs_Temp.ReleaseBuffer();
     
    //maintenant le play avec comme parametre wchar
    Un char est codé sur 1 octet alors qu'un wchar est codé sur 2 octets.
    Il n'y a pas de conversion implicite, tu dois utiliser la fonction MultiByteToWideChar ou une fonction équivalente si tu n'est pas en unicode.

  17. #37
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    t'es surtout en train de refaire ce qu'on a déjà fait au début

    tant que tu ne sauras pas ce que tu dois exactement passer comme paramètre au niveau syntaxe et au niveau sémantique, ca ne marchera pas

  18. #38
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Ok je vais tester ca

  19. #39
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    C'est vrai que pour l'instant je tourne en rond !!

    Mais je préfer encore tester des truc plutot que de rester sans rien faire en attendant une réponse qui ne viendra peut etre jamais

  20. #40
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Citation Envoyé par Brouzouf
    Tu n'as pas le droit de faire ce que tu fais, un char ne peut avoir la valeur -3.

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CString cs_Temp = "-3";
    int nTailleWChar = cs_Temp.GetLength() * sizeof(char) * 2 + 1;//+1 pour mettre un 0 a la fin
    wchar_t wchar[nTailleWChar];
     
    ::memset(wchar,0,nTailleWChar);
     
    ::MultiByteToWideChar(CP_ACP, 0, cs_Temp.GetBuffer(cs_Temp.GetLength() ), -1, wchar, nTailleWChar);
    cs_Temp.ReleaseBuffer();
     
    //maintenant le play avec comme parametre wchar
    Un char est codé sur 1 octet alors qu'un wchar est codé sur 2 octets.
    Il n'y a pas de conversion implicite, tu dois utiliser la fonction MultiByteToWideChar ou une fonction équivalente si tu n'est pas en unicode.
    J'ai un problème à la compilation avec ton code;

    Sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wchar_t wchar[nTailleWChar];
    Il me dit:
    error C2057: expected constant expression

    Je pense qu'il parle du nTailleWChar non ?

Discussions similaires

  1. Problème écriture dans un tableau d'une structure
    Par Sasuke1234 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/01/2014, 15h24
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  3. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  4. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  5. problème d'écriture dans la BD
    Par billy_ze_kid dans le forum ASP
    Réponses: 6
    Dernier message: 12/06/2005, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo