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 :

Demande d'informations sur une fonction c++


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Demande d'informations sur une fonction c++
    J'ai cette fonction et que je ne comprends pas :

    typedef int (__stdcall *HDSELAM (HWND, HDFICHE, LPCSTR, char*);
    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    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++ ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ç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.

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    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.

  6. #6
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,


    Citation Envoyé par dalfab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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
    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.

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

Discussions similaires

  1. demande de conseille pour un probleme sur une fonction
    Par pierre-y dans le forum Général Python
    Réponses: 4
    Dernier message: 19/12/2012, 11h34
  2. [MySQL] demande d'aide sur une fonction
    Par kairi084 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/05/2012, 13h51
  3. [Doctrine] Demande d'information sur une bonne utilisation
    Par anaon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/02/2009, 12h25
  4. Demande d'information sur fonctions en C
    Par tom31 dans le forum Débuter
    Réponses: 6
    Dernier message: 05/02/2008, 11h33
  5. demande d'information sur une méthode
    Par Le Lion dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/05/2007, 14h58

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