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:
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.
Re: Diff�rences avec Visual C++
Salut Kaitlyn
Citation:
Envoy� par
kaitlyn
Ces deux fonctions retournent un INT_PTR.
Selon Microsoft (copi� de la doc Visual C) la d�claration de la premi�re est
Code:
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:
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
Re: Diff�rences avec Visual C++
Merci, Kaitlyn
Citation:
Envoy� par
kaitlyn
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.)
Citation:
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