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

Visual C++ Discussion :

[Débutant] Types incompatibles dans le paramétres de CreateFile


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Par défaut [Débutant] Types incompatibles dans le paramétres de CreateFile
    Bonjour a tous,

    Voici mon premier message ici !

    je vous expose mon souci:

    j'ai crée un code au travail avec DevC++, et celui ci pose probléme quand je le porte chez moi sous VC 2008 express.
    je suis débutant en programmation et découvre a peine les api windows...

    l'objectif du programme est de vérifier la validité d'un fichier PE et éventuellement d'y apporter quelques modifications...

    voici le 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
     
    #include <windows.h>
    #include <stdio.h>
    #include <winnt.h>
     
    int main(int argc, char *argv[])
    {
        char	FilePath[MAX_PATH];
        HANDLE hFile, hMapping;
        IMAGE_DOS_HEADER *image_dos_header;
     
        printf("Enter the path of the PE file: ");
        scanf_s("%[^\n]",FilePath);
        fflush(stdin);   
        getchar();
     
        if ( (hFile = CreateFile(FilePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0)) == INVALID_HANDLE_VALUE)
        {
            puts("(CreateFile API: opening of the file failed!)");
            return EXIT_FAILURE;
        }
        if (!(hMapping = CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0)))
        {
            puts("(CreateFileMapping API failed)");
            CloseHandle(hFile);
            return EXIT_FAILURE;
        }
        if (!(image_dos_header = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, sizeof(IMAGE_DOS_HEADER))))
        {
            puts("(MapViewOfFile API failed!)");
            CloseHandle(hMapping);
            CloseHandle(hFile);
            return EXIT_FAILURE;
        }
        printf("-------------------------TEST-------------------------\n");
        getchar();
     
        printf("0x5A4D\nimage_dos_header->e_magic = %x\nIMAGE_DOS_SIGNATURE = %x\n",image_dos_header->e_magic, IMAGE_DOS_SIGNATURE);
     
        UnmapViewOfFile(image_dos_header);
        CloseHandle(hMapping);
        CloseHandle(hFile);
     
        return EXIT_SUCCESS;
    }
    et le message d'erreur:
    warning C4133: 'function' : incompatible types - from 'char [260]' to 'LPCWSTR'
    en fait il s'agit d'un warning, mais quand je lance le .exe la partie en dessous du createfile n'est pas executée, le programme buggant avant!

    j'ai cherché dans le forum et un post ressemble a mon souci:
    http://www.developpez.net/forums/sho...ght=createfile
    mais je ne comprend pas trop

    j'ai également regarder l'aide sur MSDN:
    http://msdn2.microsoft.com/en-us/lib...58(VS.85).aspx

    Si quelqu'un a une petite idée sur le sujet ?
    Comme je suis débutant et que vous avez des conseils ou des idées pour amélieorer mon code : n'hésitez surtout pas !

    Bonne soirée
    Coridalement killoobilloo

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    CreateFile() attend une chaîne de TCHAR.

    Trois solutions, par ordre de préférence décroissante:
    1. Travailler avec des TCHAR au lieu des char.
    2. Retarder l'échéance en ne compilant pas en mode unicode (Project Properties -> Configuration properties -> General -> Character Set).
    3. S'enfoncer dans le non-unicode en utilisant la fonction CreateFileA() au lieu de CreateFile().
    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.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    les projets sous visual 2005 & 2008 sont paramétrés par défaut en UNICODE.
    si tu utilises des char il faut régler le projet en MBCS.
    voir sur les propriétés du projet dans l'arborescence suivante:
    Propriétés de configuration/général/paramètres par défaut du projet/jeux de caractères.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 2
    Par défaut
    salut Médinoc & farscape

    déja merci beaucoup d'avoir répondu si vite !
    j'ai essayé tes 3 solutions Médinoc et...ca a éviter le warning de la ligne du createfile...mais malheureusement le programme ne marche pas : createfile me donne INVALID_HANDLE_VALUE en retour !



    mais bon c'est pas trés grave car je vais essayer une autre méthode en utilisant une interface graphique avec notamment une box pour sélectionner le fichier en parcourant les répertoires...

    si je ne me trompe pas (ne connaissant pas trop les apis...)
    cette autre facon de procédé devrait me retourner autre chose qu'une string/chaine de caractére, et du coup ca resolvera le probléme !

    merci encore pour m'avoir aidé et pour vos explications !
    Bonne soirée.

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

Discussions similaires

  1. [VBA] [SQL] Type incompatible dans le critère
    Par alex.a dans le forum Access
    Réponses: 13
    Dernier message: 19/01/2008, 11h19
  2. Type incompatible dans une requête
    Par tleboukaka dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/10/2007, 11h59
  3. Réponses: 9
    Dernier message: 05/10/2006, 08h31
  4. [VBA] [SQL] Type incompatible dans le critere
    Par mimi1 dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/05/2006, 21h18
  5. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06

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