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 :

conversion de LPVOID à CHAR et de CHAR à BYTE


Sujet :

Visual C++

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut conversion de LPVOID à CHAR et de CHAR à BYTE
    Salut
    Suis debutant en c++, je develloppe sous visual c++ 2008.
    J'obtiens les erreurs suivantes:

    definitions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                     static DWORD WINAPI Connect2FTPDataProc(LPVOID lpParam)
    {
        DWORD dwRecu=0, dwEtape=0;
        PROCDATA *MyProcData;
        HANDLE hFile1;
        DWORD dwSizeFile, rw, dwtimer=100, dwport=0;
        int iResult=0, isent;
        char buffer[8192], sztmp[512], *c1, *szBuff;
    ligne error: szBuff = VirtualAlloc(0, dwSizeFile+1, MEMDISPO, PAGE_READWRITE);
    **********************************************************
    compilateur:
    error C2440: '=' : cannot convert from 'LPVOID' to 'char *'
    **********************************************************
    la deuxième conversion non reussie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DWORD __stdcall TypeA(char *szName) 
    {
      BYTE buf[8] = {0};
      BYTE *c, *p, *last, a;
      DWORD d, h;
      c = (BYTE*) szName;
      while(*c) c++; 
      c--; 
      p = szName + 1 ;
    **********************************************************
    compilation: cannot convert from 'char *' to 'BYTE *'
    **********************************************************
    QQ1 aurait.il la gentillesse de m'éclaircir?
    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    la prochaine fois pense a mettre les balises de code car c'est pas clair

    concernant l'erreur c'est assez explicite quand meme
    compilateur:
    error C2440: '=' : cannot convert from 'LPVOID' to 'char *'

  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
    il suffit de faire un cast:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    szBuff = (char *)VirtualAlloc(0, dwSizeFile+1, MEMDISPO, PAGE_READWRITE);

  4. #4
    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
    Sauf qu'en C++, on utilise les casts C++.
    • void* -> nimportequoi* : static_cast<>
    • uneclasse* -> uneclassefille* : static_cast<> aussi.
    • untruc* -> unautretruc* : reinterpret_cast<>.
    • const machin* -> machin* : const_cast<>.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    szBuff = static_cast<char *>(VirtualAlloc(0, dwSizeFile+1, MEMDISPO, PAGE_READWRITE));
    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
    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
    tu ne peux t'empêcher de donner des leçons, tu crois vraiment que je l'ignore ?
    son code m'avait tout l'air d'un code "C" plutôt qu'un code C++, et je n'en fait pas plus cas que ça...

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut
    Merci les gars, pas besoin de ce disputer , je vous remercie dans tous les cas pour votre sollicitude.Vraiment gentil.

    Par contre il reste un second problème qui me reste à résoudre, grâce à la proposition de FARSCAPE j'ai pu régler ce premier problème, le deuxième était le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DWORD __stdcall TypeA(char *szName)
    {
    	BYTE buf[8] = {0};
    	BYTE *c, *p, *last, a;
    	DWORD d, h;
    	c = (BYTE*) szName;
    	while(*c) c++;
    	c--;
    	p = szName + 1 ;
    }
    Ici p est un (byte*) szName un char*,il devrait me retourner un élément de même type que p, j'ai essayé comme je pouvais rien à faire certainement à cause de mes connaissances limitées j'y arrive pas.
    Voilà l'erreur que le compilateur me fournit :
    error C2440: '=' : cannot convert from 'char *' to 'BYTE *'
    1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Merci d'avance


    EDIT PetitPapaNoël : Merci de penser aux balises CODE (bouton #), pour une meillleure lisibilité !

  7. #7
    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
    Pour faire la conversion, il faudrait caster ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = reinterpret_cast< BYTE * >(szName + 1);
    Ensuite, il faut voir précisément ce que tu cherches à faire...
    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.

  8. #8
    Membre averti
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    29
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 29
    Par défaut resolu
    résolu merci

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

Discussions similaires

  1. Conversion d'un type word en char
    Par bleuerouge dans le forum Débuter
    Réponses: 6
    Dernier message: 20/06/2008, 15h52
  2. lecture de char au lieu de byte dans la fonction read
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2007, 20h02
  3. Réponses: 5
    Dernier message: 09/05/2007, 13h35
  4. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30
  5. vector<unsigned char> et unsigned char* : conversion ?
    Par zax-tfh dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/01/2006, 10h43

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