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

D Discussion :

D - Win32 pointeurs sur fonction et delegate


Sujet :

D

  1. #1
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut D - Win32 pointeurs sur fonction et delegate
    Bonjours, je suis face à un problème avec l'API Win32, lors de la définition de la WNDCLASS, je dois passer en paramètre un pointeur sur ma fonction servant a deffinire la procédure interne a la fenêtre (lpfnWndProc de la WNDCLASS), je reçois l'erreur de compilation suivante :
    MyDL\Windows.d|100|Error: cannot implicitly convert expression (&this.mainWindowRuntime) of type int delegate(HANDLE fenetrePrincipale, uint message, uint wParam, int lParam) to int Windows function(HANDLE, uint, uint, int)|
    avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.classeFenetre.lpfnWndProc = &this.mainWindowRuntime;
    et l'erreur suivante
    MyDL\Windows.d|100|Error: function MyDL.windows.Win32Window.mainWindowRuntime (HANDLE fenetrePrincipale, uint message, uint wParam, int lParam) is not callable using argument types ()|
    avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.classeFenetre.lpfnWndProc = this.mainWindowRuntime;
    je voudrais donc savoir quel est la bonne syntaxe pour evoyer un pointeur sur ma fonction a la WNDCLASS.

    avec ma mainWindowRuntime définie comme cecis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public int mainWindowRuntime(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
    	{
    		switch (message)
    		{
    			case WM_CREATE:
    				return 0;
    			case WM_DESTROY:
    				PostQuitMessage(0);
    				return 0;
    			default:
    				return DefWindowProcA(fenetrePrincipale, message, wParam, lParam);
    		}
    	}
    Merci d'avance.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Bonjour,

    Il faut que ta procédure de fenêtre (mainWindowRuntime) soit une fonction autonome (non membre d'une classe) ou une méthode statique (Win32 c'est du C, et il n'y a pas de classes en C).
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  3. #3
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut
    Merci ça marche mais ça compromet ce que je pensait faire niveau event

    sinon j'ai aussi un problème avec la fonction CreateWindow :
    je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.fenetrePrincipale = CreateWindowA("classeF", "test", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, null, null, GetModuleHandleA(null) , null);
    cette ligne provoque l’arrêt du programme et revois le statut : -1073741819
    Process terminated with status -1073741819 (0 minutes, 4 seconds)
    Tu sais d'ou ça peut venir ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Pour les events, rien ne t'empêche (par ex) de forwarder les messages reçus par la procédure de fenêtre à un singleton qui les traitera...

    Pour le crash, je suspecte une confusion entre chaînes C et chaînes D (je n'ai pas de machine Windows sous la main pour tester). Essaie donc de remplacer "classeF" et "test" par "classeF".ptr et "test".ptr et d'utiliser toStringz() quand tes chaînes ne sont pas littérales.
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  5. #5
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut
    Tu dois avoir raison mais le fait d'ajouter .ptr ou d'utiliser toStringz ne change rien,
    le programme crash avec le même code d'erreur.

  6. #6
    Membre habitué

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Points : 147
    Points
    147
    Par défaut
    Citation Envoyé par ahoff Voir le message
    Tu dois avoir raison mais le fait d'ajouter .ptr ou d'utiliser toStringz ne change rien,
    le programme crash avec le même code d'erreur.
    En fait non : le probleme c'est que ma procédure WinProc n’était pas déclaré __stdcall/CALLBACK

    Pour ceux qui rencontrent des problèmes équivalents, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern (Windows) int mainWindowRuntime(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
    Merci pour ton aide.

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

Discussions similaires

  1. [Win32] Pointeur sur fonctions et méthodes de classe
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2007, 19h07
  2. Réponses: 5
    Dernier message: 12/01/2005, 20h58
  3. pointeurs sur fonction en C++
    Par cemoi dans le forum C++
    Réponses: 7
    Dernier message: 29/11/2004, 13h19
  4. [langage] Pointeur sur fonction
    Par Fanch.g dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2004, 10h43
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37

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