J'ai cette fonction et que je ne comprends pas :
typedef int (__stdcall *HDSELAM (HWND, HDFICHE, LPCSTR, char*);
merci d'avance pour votre aide
J'ai cette fonction et que je ne comprends pas :
typedef int (__stdcall *HDSELAM (HWND, HDFICHE, LPCSTR, char*);
merci d'avance pour votre aide
1) dit ce que tu ne comprends pas
2) copie correctement le code - il manque 1 parenthèse fermante et elle est très très importante
Mais, d'après le bout de code dégeu, tu déclares 1 type HDSELAM pointeur de fonction :![]()
Et pour finir : __stdcall est une convention d'appel ("calling convention" en anglais) :![]()
Ce bout de code vient du tréfonds d'1 projet C sous Windows post C# : pourquoi tu postes ta question en C++?
Ça définit un type nommé HDSELAM qui est un pointeur de fonction de convention __stdcall et prend en paramètre HWND, HDFICHE, LPCSTR et char* dans cet ordre.
Et qui est mal écrit parce qu'il manque clairement une parenthèse fermante après HDSELAM pour espérer compiler.
Mais je pense pas que ça t'avance bien plus...![]()
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Bonjour,
Cette expression ne déclare pas une fonction, elle déclare un type qui défini une variable pointeur.
On peut comparer avec ce que l'on fait pour les pointeurs sur des données plus simples.
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 // on veut pointer sur un entier, on peut déclarer son type intermédiaire par: typedef int* INT_PTR; // puis déclarer le pointeur par: INT_PTR var_ptr_sur_int; // l'initialiser par: var_ptr_sur_int = &var_de_type_int; // et accéder à l'entier pointé en en utilisant *var_ptr_sur_int, par exemple: *var_ptr_sur_int = 42; // on veut pointer sur une fonction, on peut déclarer son type intermédiaire par: typedef int (__stdcall *HDSELAM) (HWND, HDFICHE, LPCSTR, char*); // puis déclarer le pointeur par: HDSELAM var_ptr_sur_ma_fct; // et l'initialiser par: var_ptr_sur_ma_fct = &une_fonction_qui_a_la_meme_signature; // et accéder à la fonction pointée avec *var_ptr_sur_ma_fct, par exemple: int res = (*var_ptr_sur_ma_fct)(hwnd,hdfiche,"",buffer); // qui va appeler la fonction pointée
Merci à tous pour vos critiques et votre aide, et merci daflab pour ton explication simple et efficace, je vous tiendrai au courant de la suite, pour la parenthèse c'est un oublie car je travaille sur deux ordinateur, donc je ne peux pas faire du copier coller. en tous cas merci beaucoup.
Salut,
Dalfab, je comprends que tu as voulu être explicite mais ce genre d'écriture prédate la standardisation du C, surtout la 3ème ligne où le fait de souligner l'intention est moins naturel que d'écrire directement int res = var_ptr_sur_ma_fct(hwnd,hdfiche,"",buffer);.
Sinon comme c'est clairement du code pour un environnement windows, au lieu de __stdcall il est préférable pour des raisons de portabilité d'utiliser en lieu et place WINAPI ou APIENTRY. Un usage typique est l'appel d'une fonction distante étrangère au programme.
Partager