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 :

passage de mfc à win32api


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut passage de mfc à win32api
    salut
    J'ai deux fichiers codé en mfc (un.cpp et un .h)
    mais il faut que je les "traduise" en fichier normal win32application

    1) est ce que c'est possible
    2) si oui pouvez vous me donner des pistes de démarrage

    ps: les deux fichier sont en pièce jointe

    merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    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 519
    Points
    41 519
    Par défaut
    Ça a l'air assez facile: La classe n'utilise pas MFC en interne, à part les CString.
    Je te conseille de remplacer tes CString par des std::wstring, ne pas dériver de CObject, virer les fonctions comme Dump(), et tu auras déjà fait la majeure partie du chemin.

    PS: Beurk! Non seulement ce cast ne sert à rien, mais en plus c'est un const_cast C-style. Retire tous ces casts et n'utilise que des casts C++ quand c'est nécessaire.
    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
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    est ce que je dois inclure un autre header que winver.h car pour l,instant c'est ca fais le gros beug du programmme?

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    doit simplement enlever cet include ?
    doit je enlever l,heritage de la class Cobjet?

  5. #5
    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 519
    Points
    41 519
    Par défaut
    Ben, retire winver.h et regarde, je ne peux pas dire grand-chose d'autre...

    Et quand à CObject, tu dois retirer cette partie (en comptant le ':') et tout ce qui y est attaché: La fonction Dump, les appels de constructeur s'il y en a, etc.
    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.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    J'ai un problème avec l'argument de la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wstring Test::GetItem( LPCTSTR pszItem ) const
    apparemment c'est un pointeur en notation hongroise mais je ne vois pas comment le remplacer.
    Le compilateur ne le comprend pas comme un pointeur et lorsqu'il l'appelle autre par il me dit:
    error C2660: 'Test::GetItem' : function does not take 1 arguments

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    LPCTSTR c'est quelque chose comme Long Pointer to ConsT STRing, c'est-à-dire TCHAR const* c'est à dire soit char const* soit wchar_t const* selon les options de compilation.

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Sylvain Togni
    LPCTSTR c'est quelque chose comme Long Pointer to ConsT STRing
    Plutôt long pointer to const TCHAR string, sachant également que "long pointer" ou "near pointer" c'est pareil de nos jours et que ça veut tout simplement dire pointeur.

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    J(e n')ai (plus que) 15 erreurs.
    Elle sont concentrer dans la fonction suivante:
    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
    std::string Test::GetItem(wchar_t const* pszItem ) const
    // Get a specific verinfo item (CompanyName, etc)
    {
       ASSERT( AfxIsValidString(pszItem) );
       ASSERT_VALID( this );
       // Validate
       if( !AfxIsValidString(pszItem) ) return std::string();
       // Get item from version block
       std::string s;
       UINT nLen = 0;
       // Format sub-block
       TCHAR  szSubBlock[1024];
       ::wsprintf( szSubBlock, _T("%s%s"), m_szTransBlock, pszItem );
       // Get result
       TCHAR *pszOut = NULL;
       if ( ::VerQueryValue(m_lpVerInfoBlock, szSubBlock, (LPVOID*)&pszOut, &nLen) ) {
          s = pszOut;
       };
       return s;
    };
    le compilateur me dit identifieur not found ou undeclared identifieur aparemment ce sont des fonction mfc mais je ne sais pas quelle bibliothèque inclure pour les avoirs ou faut-t-il que j'appelle leur équivalent win32 en incluant une autre bibliothèque car je fais un projet en win32 ?

  10. #10
    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 519
    Points
    41 519
    Par défaut
    Pour la première assertion, un petit #define ASSERT assert + #include <assert.h> devrait éliminer l'erreur de la première.
    La seconde, tu la supprimes carrément.

    Ensuite, je croyais t'avoir dit d'utiliser des std::wstring...

    Edit: Les AfxIsValidString(), je te conseille de juste les supprimer.
    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.

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Le débogage est presque finit mais 4 erreur persiste :
    sur ce bout de code le compilateur me dit:
    Test.cpp(32) : error C2039: 'Empty' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
    pourtant empty fait bien partie de string
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     std::wstring s;
       UINT nLen = 0;
       // Format sub-block
       TCHAR *  szSubBlock[1024];
       ::wprintf( szSubBlock, _T("%s%s"), m_szTransBlock, pszItem  );
          // Get result
       TCHAR *pszOut = NULL;
       if ( VerQueryValue(m_lpVerInfoBlock, szSubBlock, (LPVOID*) &pszOut, &nLen) )
       {
          s = pszOut;
       }
       return s;
    };
    .\Test.cpp(111) : error C2664: 'wprintf' : cannot convert parameter 1 from 'TCHAR *[1024]' to 'const wchar_t *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    .\Test.cpp(114) : error C2664: 'VerQueryValueW' : cannot convert parameter 2 from 'TCHAR *[1024]' to 'LPWSTR'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    .\Test.cpp(118) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const _Elem *)' : cannot convert parameter 1 from 'std::wstring' to 'const char *'
    pourtant je n,ai pas de const char * je ne voit pas comment régler ces problèmes de conversion

  12. #12
    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 519
    Points
    41 519
    Par défaut
    1. Tu dois avoir une méthode clear() ou un truc du genre dans std::wstring.
    2. Tu as mis TCHAR * szSubBlock[1024];, l'étoile est de trop (et je pense que tu devrais mettre directement des WCHAR ici, d'ailleurs).
    3. Ta fonction devrait retourner une std::wstring également.
    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.

  13. #13
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    j'ai résolu toute les erreurs mais je ne vois pas comment accéder correctement au méthode de ma classe .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Test essai;
    	essai.GetFileVersion;
    	return 0;
    }
    .\FVIModif.cpp(11) : error C3867: 'Test::GetFileVersion': function call missing argument list; use '&Test::GetFileVersion' to create a pointer to member
    je met mes fichier finals en pj
    Fichiers attachés Fichiers attachés

  14. #14
    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 519
    Points
    41 519
    Par défaut
    Ben, ce doit être un truc du type:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <windows.h>
    #include "test.h"
    #include <iostream>
     
    int main(void)
    {
    	Test essai;
    	essai.Open(L"C:\\Blabla\\Toto.exe");
    	std::wstring version = essai.GetFileVersion();
    	//si cette ligne ne compile pas, utiliser wcout à la place (qui ne marche pas sous MinGW)
    	std::cout << version << std::endl;
    	return 0;
    }
    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.

  15. #15
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    ca compile corectement avec le wcout ca lance bien le programme mais aprés qu,il est lancé la console sa m'affiche:
    Unhandled exception at 0x77c0154d in FVIModif.exe: 0xC0000005: Access violation reading location 0x00000004.

  16. #16
    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 519
    Points
    41 519
    Par défaut
    Ben désolé, je n'ai pas le temps de vérifier ton code à ta place, je suis un peu overbooké en ce moment.
    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.

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    j'ai résolu mon probléme
    sa ma pris du temps mais j'y suis arrivé
    si quelqu'un a un probléme similaire je peux fournir le code source au besoin.

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

Discussions similaires

  1. MFC : Passage à Visual Studio 2008 ?
    Par Someonelse dans le forum MFC
    Réponses: 17
    Dernier message: 03/11/2008, 18h36
  2. [MFC] passage d'un CEdit à une fonction
    Par le-makinero dans le forum MFC
    Réponses: 28
    Dernier message: 22/05/2006, 09h11
  3. Passage de pointeur de dialog MFC
    Par mr.saucisse dans le forum MFC
    Réponses: 7
    Dernier message: 05/02/2006, 13h29
  4. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11
  5. [MFC]Passage de VC5 à VC6
    Par _Thomas_ dans le forum MFC
    Réponses: 5
    Dernier message: 22/04/2004, 09h57

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