Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1803 connectés 

  FORUM HardWare.fr
  Programmation

  [VC++] Déclaration et appel d'une fonction callback

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Déclaration et appel d'une fonction callback

n°71563
Kouye
Posté le 12-11-2001 à 15:14:11  profilanswer
 

Salut !
 
voila j'utilise la fonction :
 
BOOL EnumChildWindows(
  HWND hWndParent,         // handle to parent window
  WNDENUMPROC lpEnumFunc,  // callback function
  LPARAM lParam            // application-defined value
);
 
je tape ceci : ::EnumChildWindows(::GetDesktopWindow(), EnumWindowsProc, 0);
 
et je déclare ma fonction CALLBACK ainsi :
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
le problème est que si je ne rajoute pas "static" devant la déclaration le compilateur pete une erreur : cannot convert parameter 2 from 'int (struct HWND__ *,long)' to 'int (__stdcall *)(struct HWND__ *,long)'
 
j'arrive pas a faire un CAST pour que cela fonctionne sans mettre la fonction en static :(
 
merci de m'éclairer :)

mood
Publicité
Posté le 12-11-2001 à 15:14:11  profilanswer
 

n°71589
Kouye
Posté le 12-11-2001 à 16:20:21  profilanswer
 

up !
 
personne n'utilise de fonction callback ?

n°71630
Kouye
Posté le 12-11-2001 à 18:24:31  profilanswer
 

:cry:  :cry:  
personne y veut m'aider :(

n°71637
TheJackal
Posté le 12-11-2001 à 18:38:24  profilanswer
 

ta essayer de mettre __stdcall a tout hasard?
bizarre ca marche bien chez moi

n°71640
H4dd3R
Q2
Posté le 12-11-2001 à 18:43:52  profilanswer
 

Si ta callback est membre non static d´une classe c normal que ça foire..
Pour de sombres raisons le compilo est pas capable de connaitre l´adresse d´une fonction dans une classe.. qqun sait la raison profonde?? Est-ce parce que l´adresse d´une fonction est pas censée être donnée dynamiquement?? Pquoi est-ce impossible??
Donc moi j´ai dû mettre ttes mes callbacks en static..  :\


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
n°71642
TheJackal
Posté le 12-11-2001 à 18:46:20  profilanswer
 

elle a pas l'aire d'etre dans une classe sa fonction

n°71708
Kouye
Posté le 12-11-2001 à 23:22:53  profilanswer
 

qui arrive a faire appel a une fonction CALLBACK sans déclarer celel ci en static .. et/ou a aprtir de cette focntion CALLBACK a modifier une variable du programme principal ..
 
SVP parceque là je désespère ..

n°71711
Kouye
Posté le 12-11-2001 à 23:26:48  profilanswer
 

oui j'aai essayé de metre __stdcall ainsi :
SetWindowsHookEx(WH_KEYBOARD, __stdcall MyKeyGrab, NULL,GetCurrentThreadId());
 
et j'ai l'erreur suivante : error C2059: syntax error : '__stdcall'
 
si quelqu'un a un pti programme  pour déclarer cette fonction en mode non static !!!!! :)

n°71771
H4dd3R
Q2
Posté le 13-11-2001 à 09:56:28  profilanswer
 

Ta fonction est-elle ds une classe ou non???
 
Et sinon qqun peut me répondre dans le cas d´une classe pquoi c qu´en static?? :)

n°71796
chrisbk
-
Posté le 13-11-2001 à 11:40:05  profilanswer
 

H4dd3R a écrit a écrit :

Si ta callback est membre non static d´une classe c normal que ça foire..
Pour de sombres raisons le compilo est pas capable de connaitre l´adresse d´une fonction dans une classe.. qqun sait la raison profonde?? Est-ce parce que l´adresse d´une fonction est pas censée être donnée dynamiquement?? Pquoi est-ce impossible??
Donc moi j´ai dû mettre ttes mes callbacks en static..  :\  




 
vi, parce que les ptr de fonction membre sont different, vu qu'il faut :
 
1)ptr sur la fonction
2)ptr sur le membre
 
(donc ca entre po)
 
alors qu'en static ben tu te fous du membre, donc c ok
 
bref ca marche pas

mood
Publicité
Posté le 13-11-2001 à 11:40:05  profilanswer
 

n°71830
TheJackal
Posté le 13-11-2001 à 15:05:17  profilanswer
 

c ds la declaration de la fonction __stdcall
 

Code :
  1. void __stdcall truc () {...}


 
en faite c la def de CALLBACK

n°71943
Kouye
Posté le 13-11-2001 à 19:18:39  profilanswer
 

bon je rame toujours :(
 
alors la fonction EnumChildWindows() est appelée sur un OnButton
d'une classe DLG de la manière suivante :
::EnumChildWindows(TopWin->m_hWnd, EnumChildWnd,(LPARAM)&NextButton);
 
et EnumchildWnd est délarée dans le .h de ma classe de cette façon :
static BOOL CALLBACK EnumChildWnd( HWND hwnd, LPARAM lParam);
 
 
cela marche tant que je laisse le static devant.. moi je veux le virer :( comment faire ???

n°71957
TheJackal
Posté le 13-11-2001 à 20:43:36  profilanswer
 

EnumChildWnd est bien en dehors de la classe?

n°71965
Kouye
Posté le 13-11-2001 à 21:24:36  profilanswer
 

non il est dans la classe pkoi ?

n°71970
TheJackal
Posté le 13-11-2001 à 21:45:45  profilanswer
 

:sarcastic:  
ca t'arrive de lire ce qu'on ecrit?

n°72019
Kouye
Posté le 14-11-2001 à 00:57:15  profilanswer
 

:ange: heu bah oui je lis !!
mais j'avai pas capté que cela pouvai changer quelquechoz :(
j'essaye ...

n°72020
Kouye
Posté le 14-11-2001 à 02:04:11  profilanswer
 

je veins de metre la focntion CALLBACK a l'intéréieure d'une autre classe et le pb est le meme :(
imosssible de faire l'appel sans déclarée la fonction en static :-(
 
je vais peter un plomb :(

n°72025
chrisbk
-
Posté le 14-11-2001 à 08:26:22  profilanswer
 

putain, on te dit que c pas possible !
 
si tu tiens a la mettre dans une classe, il FAUT la mettre en static
 
(qu'elle soit dns la classe A ou la classe B ca change niet)

n°72068
Kouye
Posté le 14-11-2001 à 11:03:42  profilanswer
 

okkkkkkkkk !!! c vraimetn chiant alors :(
 
je vais devoir feinter :(
 
car mon bur est d'arriver a modifier des variable de la calsse ou est déclarée cette connnasse de fonction callback..
et lorsque la fonction est déclarée en static le copilot me dis qu'ne focntion static ne peux pas acceder aux variables de la classe.

n°72071
BENB
100% Lux.
Posté le 14-11-2001 à 11:22:44  profilanswer
 

Ben sinon comment peut elle savoir a quelle classe elle fait reference...

n°72074
chrisbk
-
Posté le 14-11-2001 à 11:26:40  profilanswer
 

Kouye a écrit a écrit :

okkkkkkkkk !!! c vraimetn chiant alors :(
 
je vais devoir feinter :(
 
car mon bur est d'arriver a modifier des variable de la calsse ou est déclarée cette connnasse de fonction callback..
et lorsque la fonction est déclarée en static le copilot me dis qu'ne focntion static ne peux pas acceder aux variables de la classe.  




 
vi logique
 
mais generalement les callback on un param ou tu peux mettre dedans ce que tu veux.... genre un ptr vers ta classe

n°72246
H4dd3R
Q2
Posté le 14-11-2001 à 16:53:27  profilanswer
 

[b]chrisbk[b]
1)ptr sur la fonction  
2)ptr sur le membre  
 
(donc ca entre po)

 
C pa vrai c juste pour ça que c interdit?? Juste parce qu´on s´est pas embêté à définir un type AdresseFunc qui encapsule les 2 et à l´utiliser pour les définitions de callback..
Ben.. Backward compatibility qd tu nous tient :(
 
Sinon d´accord avec toi pour la fin la solution c de passer l´adresse de la classe en param de callback.. Mais c pas très élégant..

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VC++] Déclaration et appel d'une fonction callback

 

Sujets relatifs
[JAVASCRIPT] FONCTION REPLACE !!!!!!!!!!!! ..... c BON![PHP] Comment savoir si une fonction est déjà définie?
[ PHP ] Quelqu'un peut m'expliquer la fonction switch ?[PHP] Ralentissement a chaque appel de la page php3
[C] Type d'1 variable comme paramètre à 1 fonctionmaple :c koi le nom de la fonction pour la concatenation?
[VB 5] Création & appel d'une DLL ?fonction excel => pourquoi elle marche pas ??
[java] Cherche petite fonction pour remplacer un caractère[C++] Y a une fonction qui agit comme Mid en VB ?
Plus de sujets relatifs à : [VC++] Déclaration et appel d'une fonction callback


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR