[Visual C++] fonctions Callback

fonctions Callback [Visual C++] - Programmation

Marsh Posté le 03-07-2001 à 17:48:20    

dans la série lolo et sa dll ...  :D  
 
j'ai :
- une fonction callback, définie ds l'appli qui utilise la dll
- une fonction machin qui prend un handle HWND censé représenter la callback (?)
 
en gros ca se raccorde comment les 2 morceaux ? (explications avec du code, ca serait trop fort !)
 
merci  :jap:

Reply

Marsh Posté le 03-07-2001 à 17:48:20   

Reply

Marsh Posté le 03-07-2001 à 18:16:00    

Le moins que l'on puisse dire c'est que c'est pas clair...
 
HWND comme sa je dirais que c'est un Handle de fenetre :D mais bon peu importe...
tu appelle la fonction machin et tu lui passe la fonction sans mettre d'argument avec un & devant... (optionnel il me semble mais je ne suis pas sure...)
 
maintenent verifie que HWND est bien un pointeur sur un CallBack j'en doute un peu quand meme...

Reply

Marsh Posté le 03-07-2001 à 18:21:58    

désolé si c pas clair, ca l'est pas pr moi deja :D
 
si g tt suivi a ce qu'on a tenté de m'expliquer, le HWND c equivalent a un int (ca serait comme un identifiant en gros)
 
le probleme c justement que je sais pas comment recuperer la callback a partir de cet identifiant
on m'a parlé de prog windows et comme quoi ct courant de faire comme ca ...  :??:
 
j'ai essayé de regarder a callback ds la msdn ms bon ds le genre limpide on fait mieux...
 
bref c la memerde
 
 :hot: help :hot:


---------------

Reply

Marsh Posté le 03-07-2001 à 19:38:15    

__Lolo__ a écrit a écrit :

le probleme c justement que je sais pas comment recuperer la callback a partir de cet identifiant
on m'a parlé de prog windows et comme quoi ct courant de faire comme ca ...  :??:


toujours pas clair :D si tu expliquais (en détail ?) ce que tu veux faire.

Reply

Marsh Posté le 03-07-2001 à 20:33:12    

la galere les fonctions callback .. m'en suis servi qu'une seule fois
 
tu trouveras des exemples sur codeguru.com et codeproject.com

Reply

Marsh Posté le 03-07-2001 à 20:35:08    

dis lolo, tu serais pas en train de vouloir utiliser les hook sur les evenements genre keyb ou mouse...? :hello:


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 03-07-2001 à 20:55:08    

la viper a écrit a écrit :

la galere les fonctions callback .. m'en suis servi qu'une seule fois
 
tu trouveras des exemples sur codeguru.com et codeproject.com  




qqn qui me comprend !!!!! merci je vais voir ca de suite :jap:  
 
[citation]dis lolo, tu serais pas en train de vouloir utiliser les hook sur les evenements genre keyb ou mouse...? [/citation]
 :hello: wpk
 
 :??: heu... pas du tout :D  
en fait g une dll en C++ qui permet d'écrire des clients pr une certaine appli
moi je fais une dll en C++ (avec une interface C pour pouvoir etre appeler en Delphi) qui l'encapsule  :pt1cable:  
ds ma dll je m'occupe de la récupération de message que les composants delphi devront afficher par exemple. pour ca je souhaitais faire passer a ma fonction de récupération un pointeur sur la fonction d'affichage mais on m'impose un argument HWND pr la fonction de récupération  :fou:  
 
voila j'ai essayé de faire clair, si vous avez d'autres idées, je suis preneur :D


---------------

Reply

Marsh Posté le 04-07-2001 à 09:26:56    

:hot: up :hot:

Reply

Marsh Posté le 04-07-2001 à 09:45:27    

si je comprends bien tu veux faire passer un pointeur sur fonction à une fonction qui prend comme param un HWND ? t'es sûr de t'y prendre correctement ? c'est 100% ton code ou tu es obligé d'utiliser une api ?
 
la syntaxe pour pointeur sur fonction, qq1 l'a donné y'a pas longtemps dans un thread. tu peux t'en servir pour la caster en hwnd (sic), ou si tu as besoin du hwnd, caster une structure qui contient le hwnd et le pointeur (resic).
 
à part ça je vois pas ... faudrait que tu balances qq lignes d'exemple.

Reply

Marsh Posté le 04-07-2001 à 09:53:42    

bah en fait moi je voulais utiliser le pointeur sur fonction
mais je dois utiliser une ancienne API qui utilisait un HWND (c définit où d'ailleurs le HWND ?)

Reply

Marsh Posté le 04-07-2001 à 09:53:42   

Reply

Marsh Posté le 04-07-2001 à 16:01:16    

La solution :
LONG SetWindowLong(
  HWND hWnd,       // handle of window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
);
 
avec  nIndex = GWL_WNDPROC  
et dwNewLong  = pointeur sur la procedure CallBack  
 
HWND est un type de base de windows, du moment qu'on met windows.h dans un prog il est défini. Sous les os 32bits c'est un entier 32bit mais ça peut varier suivant les platformes, par example sous windows 3.1 c'est un entier sur 16bits. C'est pour cela que l'on definie un type spécial, pour aider à la portabilité


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 04-07-2001 à 16:07:00    

seblamb a écrit a écrit :

La solution :
LONG SetWindowLong(
  HWND hWnd,       // handle of window
  int nIndex,      // offset of value to set
  LONG dwNewLong   // new value
);
 
avec  nIndex = GWL_WNDPROC  
et dwNewLong  = pointeur sur la procedure CallBack  
 
HWND est un type de base de windows, du moment qu'on met windows.h dans un prog il est défini. Sous les os 32bits c'est un entier 32bit mais ça peut varier suivant les platformes, par example sous windows 3.1 c'est un entier sur 16bits. C'est pour cela que l'on definie un type spécial, pour aider à la portabilité  




Aider a la portabilite et ajouter de la semantique...
un HWND on sait que c'est un fenetre... alors que long... on n sait pas...
C'est pour cela que utiliser un HWND pour passer un ptr de fct ca me choque...

Reply

Marsh Posté le 04-07-2001 à 16:24:09    

A mon avis la fonction remplace CallBack de la fenetre dont tu passes le handle ( HWND) par son propre CallBack grace à la fonction de SetWindowLong.
Elle doit surement sauvegarder ( avec GetWindowsLong() ) l'ancien CallBack de la fenetre et l'appeler après avoir fait ses propres traitements.
C'est quelque chose de courant, ça s'appelle dans l'aide de windows "Subclassing a window".


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Marsh Posté le 04-07-2001 à 16:24:14    

rah merci !!! :love:  
je vais voir ca tt de suite

Reply

Marsh Posté le 05-07-2001 à 09:20:03    

je crois que j'ai trouvé !!
les composants delphi ont tous une methode wmmessage qui intercepte WM_UPDATE
donc l'appel a une callback est remplacée par l'envoi d'un message wm_update au handle du composant
 
question : c koi comme type de messages (exception ?, autre ?), ca s'envoit comment en visual c++ ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed