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

Code::Blocks Discussion :

Diff�rences avec Visual C++


Sujet :

Code::Blocks

  1. #1
    Membre du Club
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2024
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Services � domicile

    Informations forums :
    Inscription : Juillet 2024
    Messages : 7
    Par d�faut Diff�rences avec Visual C++
    Bonjour
    Je suis en train de "porter" (oui, c'est souvent n�cessaire...) un petit programme de Visual C++ � Code:Blocks utilisant GnuCC et MinGW.
    J'ai du code qui se compile sans aucune erreur dans le premier mais je n'arrive pas � le faire dig�rer par GnuCC.
    Voici juste le minimum essentiel:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int CALLBACK doDialog( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
    ...
    WinMain()...
    {
      int choix;
    ...
      choix = DialogBox( hInst, MAKEINTRESOURCE( IDD_DIALOG1 ), NULL, doDialog );
    ...
    }
    Cela a toujours compil� et fonctionn� parfaitement (depuis 2012, je l'utilise souvent) dans Visual Studio mais dans Code::Blocks le GnuCC refuse le cast: "conversion invalide" de doDialog().
    J'ai essay� (DLGPROC) explicitement, j'ai chang� le type de doDialog() mais rien n'y fait.
    Plusieurs valeurs peuvent �tre retourn�es par doDialog() donc il ne peut pas �tre "bool" - mais m�me si je d�finis ainsi pour voir �a ne marche toujours pas.
    Seul changer la d�claration de DialogBox() dans winuser.h le fait passer... mais je n'aime pas faire �a (normalement " __MINGW_NAME_AW DialogBox( ..."). Ca revient � "long long int (*)" alors que dans VS tout �tait de 32 bits. Un rapport?

    Une id�e? Merci d'avance.

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    667
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 667
    Par d�faut
    Salut,

    Ces deux fonctions retournent un INT_PTR.

  3. #3
    Membre du Club
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2024
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Services � domicile

    Informations forums :
    Inscription : Juillet 2024
    Messages : 7
    Par d�faut Re: Diff�rences avec Visual C++
    Salut Kaitlyn

    Citation Envoy� par kaitlyn Voir le message
    Ces deux fonctions retournent un INT_PTR.
    Selon Microsoft (copi� de la doc Visual C) la d�claration de la premi�re est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    int DialogBox(
      HINSTANCE hInstance,  // handle to application instance
      LPCTSTR lpTemplate,   // identifies dialog box template
      HWND hWndParent,      // handle to owner window
      DLGPROC lpDialogFunc  // pointer to dialog box procedure
    );
    Donc DialogBox retourne un int

    --------
    doDialog - son 4i�me param�tre (une fonction d�finie par le programmeur) - est du type DLGPROC - un pointeur � une fonction BOOL CALLBACK
    (son nom seul - sans les '(' et ')' - est un pointeur).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    BOOL CALLBACK DialogProc(
      HWND hwndDlg,  // handle to dialog box
      UINT uMsg,     // message
      WPARAM wParam, // first message parameter
      LPARAM lParam  // second message parameter
    );
    Donc doDialog() (DialogProc) retourne un boolean (du moins z�ro ou non-z�ro).

    Cette fonction traite la commande re�ue dans uMsg et Wparam (selon l'action de l'utilisateur), puis retourne une valeur non-z�ro ou z�ro (message trait� ou pas).
    Elle retourne une valeur sp�cifique (un int) dans son appel � EndDialog(), qui devient la valeur retourn�e par dialogBox() - un int qui peut �tre utilis�e dans un switch.

    --------
    J'ai l'impression que minGW a d'autres id�es - mais que �a plaise ou pas c'est Microsoft seul qui peut d�finir les fonctions de Windows ;-)

    Cdlt, Christophe

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    667
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 667
    Par d�faut
    C'est bien INT_PTR, c'est ce que dit la doc Microsoft :
    https://learn.microsoft.com/en-us/wi...ser-dialogboxw
    https://learn.microsoft.com/en-us/wi...ialogboxparamW
    https://learn.microsoft.com/en-us/wi...inuser-dlgproc

    Certainement ta version est trop ancienne, avant les syst�mes 64bits.
    INT_PTR est un entier avec capacit� d'adressage (capable de contenir un pointeur), ceci explique cela.

  5. #5
    Membre du Club
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2024
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Services � domicile

    Informations forums :
    Inscription : Juillet 2024
    Messages : 7
    Par d�faut Re: Diff�rences avec Visual C++
    Merci, Kaitlyn

    Citation Envoy� par kaitlyn Voir le message
    C'est bien INT_PTR, c'est ce que dit la doc Microsoft :
    ...
    Certainement ta version est trop ancienne, avant les syst�mes 64bits.
    Eh oui, tu as raison: c'est celle que j'ai eue depuis 1998.
    (J'ai install� la derni�re version de VS mais j'ai vite vir� cette gigantesque usine � gaz en faveur de Code::Blocks.)

    INT_PTR est un entier avec capacit� d'adressage (capable de contenir un pointeur), ceci explique cela.
    OK, alors �a compile, mais ne marche plus.
    Je dois modifier le code pour tenir compte des changements. Ainsi que la d�finition de ma bo�te de dialog.
    Ou retourner � mon VC sur une autre machine sous XP ;-)

    En passant � Win 11 j'�tais content (et surpris) de d�couvrir que tous mes petits outils faits pour '95, '98 et XP marchent toujours - sans rien faire.
    M�me ceux qui plongent dans le syst�me (p. ex. en installant des hooks). Seuls certaines parties de la BDR ont chang�s.

    Bonne journ�e
    Cdlt

  6. #6
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    667
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 667
    Par d�faut
    Citation Envoy� par bitwyse Voir le message
    Ou retourner � mon VC sur une autre machine sous XP
    Ou tout en restant sur ton Windows 11, utiliser (entre autre possibilit�s) l'option -m32 de GCC.

  7. #7
    Membre du Club
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2024
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Services � domicile

    Informations forums :
    Inscription : Juillet 2024
    Messages : 7
    Par d�faut
    Citation Envoy� par kaitlyn Voir le message
    Ou tout en restant sur ton Windows 11, utiliser (entre autre possibilit�s) l'option -m32 de GCC.
    Merci, Kaitlyn. En fait j'avais d�j� essay� �a (mais en cochant l'option du compiler "target x86 32bit") mais �a ne change pas la d�claration de doDialog()
    Ce n'est pas clair, parce que si je mets le curseur sur "dialogBox" il affiche "___MINGW_NAME_AW(dialogBox )" et non pas "INT_PTR"
    Puisque "___MINGW_NAME_AW" n'est pas d�fini dans un ".h" dans le dossier des "include" (je l'avais cherch�) �a ne m'avait pas aid�.

    Aussi, "INT_PTR" est un peu �garant, car ce n'est pas un (int *) - comme le nom le laisse supposer - mais un "long long int" (qui peut �tre un pointeur).

    Cdlt, Christophe

  8. #8
    CGi
    CGi est d�connect�
    Expert confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par d�faut
    J'ai test� la compilation d'une simple bo�te de dialogue comme tu d�cris avec Code:Blocks (MinGW_64 plusieurs versions) �a compile sans soucis (en C), avec n'importe quel type de retour pour la callback (BOOL, int, INT_PTR) . Et aussi bien en 32 bits qu'en 64 bits. J'ai m�me test� avec un ancien MinGW.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  9. #9
    Membre du Club
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2024
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Services � domicile

    Informations forums :
    Inscription : Juillet 2024
    Messages : 7
    Par d�faut
    Citation Envoy� par CGi Voir le message
    J'ai test� la compilation d'une simple bo�te de dialogue comme tu d�cris avec Code:Blocks (MinGW_64 plusieurs versions) �a compile sans soucis (en C), avec n'importe quel type de retour pour la callback (BOOL, int, INT_PTR) . Et aussi bien en 32 bits qu'en 64 bits. J'ai m�me test� avec un ancien MinGW.
    Comme je l'ai d�j� dit je n'ai plus de probl�me avec la compilation avec INT_PTR. Mais si je remets int il me dit tout de suite
    "invalid conversion from 'int (*)(HWND, UINT, WPARAM, LPARAM)' to 'DLGPROC' ...^do_Dialog"
    - et il n'a pas tort.

    Pourquoi ? Ce n'est pas toi qui traite la valeur de retour de la callback ?
    Non. C'est dialogBox() en recevant la valeur pass�e � EndDialog() par doDialog().
    Ensuite j'obtiens la valeur � partir d'elle.
    Puis je traite la valeur avec un switch ( choix )... o� choix est un int pouvant avoir plusieurs valeurs selon le choix de l'utilisateur - pas uniquement true ou false.

Discussions similaires

  1. [VB.NET] Cr�ation de control avec visual studio
    Par HULK dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 01/08/2007, 18h06
  2. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    R�ponses: 1
    Dernier message: 24/05/2004, 04h33
  3. R�ponses: 3
    Dernier message: 07/04/2004, 12h44
  4. R�ponses: 12
    Dernier message: 02/02/2004, 13h41
  5. Comment attaquer Mysql avec Visual C++
    Par brisou_ dans le forum Administration
    R�ponses: 4
    Dernier message: 11/03/2003, 13h12

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