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

 C++ Discussion :

nouvelle version = nouveaux problèmes


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut nouvelle version = nouveaux problèmes
    Bonjour à tous.

    Voilà, je cherche à réaliser un petit utilitaire de remplacement de charactère. En effet je dois traiter des fichiers textes contenant 320 000 lignes de données non misent en forme . J'avais déjà réalisé cet utilitaire sur une version de Visual (et ça fonctionnait nickel). Je suis maintenant sous la version 8.0.50727.42 et je rencontre une erreure ...
    Voici mon code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    #include <Commdlg.h>
    #include <Wtsapi32.h>
     
    //FILE* fopen(const char* , const char* );
    int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int);
     
    OPENFILENAME ofn ; //variable globale
    char szFile[100] ;
     
    void main(int argc, char *argv[])
    {
    	char caractereActuel;
       // L'ERREURE EST A LA LIGNE SUIVANTE !
    	WinMain (NULL, NULL, (LPWSTR) GetCommandLine(), 5); // L 17
     
        FILE* fichier1 = NULL;
    	FILE* fichier2 = NULL;
     
        fichier1 = fopen(szFile, "r");
    	fichier2 = fopen("data.txt", "w");
     
        if (fichier1 != NULL)
        {
            caractereActuel = fgetc(fichier1); // On initialise caractereActuel
     
    	// Boucle de lecture des caractères un à un
    	while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
    	{
    	    printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
    		if (caractereActuel ==' ') fputc('\t', fichier2);
    		else fputc(caractereActuel, fichier2);
      	    caractereActuel = fgetc(fichier1); // On lit le caractère suivant
    	}
     	fclose(fichier1);
    	fclose(fichier2);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier Waveform.txt");
        }
    	remove(szFile);
    	rename("data.txt", szFile);
    }
     
     
    int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
    {
     
        // open a file name
    	ZeroMemory( &ofn , sizeof( ofn));
    	ofn.lStructSize = sizeof ( ofn );
    	ofn.hwndOwner = NULL  ;
    	ofn.lpstrFile = szFile ;
    	ofn.lpstrFile[0] = '\0';
    	ofn.nMaxFile = sizeof( szFile );
    	ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    	ofn.nFilterIndex =1;
    	ofn.lpstrFileTitle = NULL ;
    	ofn.nMaxFileTitle = 0 ;
    	ofn.lpstrInitialDir=NULL ;
    	ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ;
     
    	GetOpenFileName( &ofn );
     
    	// Now simply display the file name 
    	MessageBox ( NULL , ofn.lpstrFile , "File Name" , MB_OK);
    	return 0;
    }
    L'erreur est : error C2664: 'WinMain'*: impossible de convertir le paramètre 3 de 'LPWSTR' en 'LPSTR' à la ligne 17

    Merci de me donner l'explication à cette (drôle) d'erreure !

    @++

  2. #2
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinMain (NULL, NULL, (LPSTR) GetCommandLine(), 5);
    ?

    En passant, le code, il est vraiment moche...

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par elikante Voir le message
    Bonjour à tous.

    Voilà, je cherche à réaliser un petit utilitaire de remplacement de charactère. En effet je dois traiter des fichiers textes contenant 320 000 lignes de données non misent en forme . J'avais déjà réalisé cet utilitaire sur une version de Visual (et ça fonctionnait nickel). Je suis maintenant sous la version 8.0.50727.42 et je rencontre une erreure ...
    Voici mon code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    #include <Commdlg.h>
    #include <Wtsapi32.h>
     
    //FILE* fopen(const char* , const char* );
    int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int);
     
    OPENFILENAME ofn ; //variable globale
    char szFile[100] ;
     
    void main(int argc, char *argv[])
    {
    	char caractereActuel;
       // L'ERREURE EST A LA LIGNE SUIVANTE !
    	WinMain (NULL, NULL, (LPWSTR) GetCommandLine(), 5); // L 17
     
        FILE* fichier1 = NULL;
    	FILE* fichier2 = NULL;
     
        fichier1 = fopen(szFile, "r");
    	fichier2 = fopen("data.txt", "w");
     
        if (fichier1 != NULL)
        {
            caractereActuel = fgetc(fichier1); // On initialise caractereActuel
     
    	// Boucle de lecture des caractères un à un
    	while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
    	{
    	    printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
    		if (caractereActuel ==' ') fputc('\t', fichier2);
    		else fputc(caractereActuel, fichier2);
      	    caractereActuel = fgetc(fichier1); // On lit le caractère suivant
    	}
     	fclose(fichier1);
    	fclose(fichier2);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier Waveform.txt");
        }
    	remove(szFile);
    	rename("data.txt", szFile);
    }
     
     
    int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow )
    {
     
        // open a file name
    	ZeroMemory( &ofn , sizeof( ofn));
    	ofn.lStructSize = sizeof ( ofn );
    	ofn.hwndOwner = NULL  ;
    	ofn.lpstrFile = szFile ;
    	ofn.lpstrFile[0] = '\0';
    	ofn.nMaxFile = sizeof( szFile );
    	ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    	ofn.nFilterIndex =1;
    	ofn.lpstrFileTitle = NULL ;
    	ofn.nMaxFileTitle = 0 ;
    	ofn.lpstrInitialDir=NULL ;
    	ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ;
     
    	GetOpenFileName( &ofn );
     
    	// Now simply display the file name 
    	MessageBox ( NULL , ofn.lpstrFile , "File Name" , MB_OK);
    	return 0;
    }
    L'erreur est : error C2664: 'WinMain'*: impossible de convertir le paramètre 3 de 'LPWSTR' en 'LPSTR' à la ligne 17

    Merci de me donner l'explication à cette (drôle) d'erreure !

    @++
    L'erreur n'est pas drôle. Le compilateur est en train de te dire que tu te trompes de jeu de caractère : ton programme n'est pas, comme tu le crois, compilé avec _UNICODE. Tu peux changer ça dans les options du projet.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le mieux est de supprimer carrément le cast en question.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le mieux est de supprimer carrément le cast en question.
    Je pense qu'il faudrait revoir la déclaration et la définition de WinMain, pour l'accorder avec la définition réelle.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    WinMain() prend un LPSTR. Pour les autres types de chaîne, il faut utiliser wWinMain() ou _tWinMain().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    L'erreur n'est pas drôle. Le compilateur est en train de te dire que tu te trompes de jeu de caractère : ton programme n'est pas, comme tu le crois, compilé avec _UNICODE. Tu peux changer ça dans les options du projet.


    En passant, le code, il est vraiment moche...
    J'ai le mérite d'essayer des solutions exotiques (ou mal interprétés )

    Je vais supprimer le cast. Merci beaucoup pour votre aide.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Changer cette option du projet ne change que deux choses: Le type de TCHAR et la version utilisée par défaut pour les fonctions qui manipulent des TCHAR.

    Partout où char ou wchar_t est utilisé explicitement (ou une fonction XxxxxxA() ou XxxxxxW()), cette option n'a pas d'effet.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Changer cette option du projet ne change que deux choses: Le type de TCHAR et la version utilisée par défaut pour les fonctions qui manipulent des TCHAR.

    Partout où char ou wchar_t est utilisé explicitement (ou une fonction XxxxxxA() ou XxxxxxW()), cette option n'a pas d'effet.
    Ceci dit, les appels explicites à XxxxA ou XxxxW sont rares, très rares.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CCHF15] - Nouvelle version - Nouveaux bugs
    Par Bowen dans le forum HyperFileSQL
    Réponses: 7
    Dernier message: 21/01/2011, 12h08
  2. problème vector nouvelle version
    Par Nikolai dans le forum C++
    Réponses: 8
    Dernier message: 08/07/2009, 11h20
  3. Problème avec nouvelle version de g++
    Par ValyGator dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 31/03/2009, 17h22
  4. Problème d'affichage avec la nouvelle version Java
    Par anadoncamille dans le forum 2D
    Réponses: 26
    Dernier message: 25/01/2009, 23h53
  5. Réponses: 7
    Dernier message: 23/07/2006, 20h01

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