et je peux pas rajouter de parametre suplémentaire :( en LPARAM :(
SoWhatIn22
> Et comment tu fais si tu dois utiliser une fonction callback procedure de fenetre (type WndProc)???
Dans le cas de cette callback, tu es obligé d'envoyer un message windows (avec les LParam etc...)
Normalement, tu as une callback par default, mais tu peux faire un mapping de la tienne...
J'ai pas d'exemple sous la main, mais c sur que ca fonctionne puisque je l'ai deja fais.
robUx4
PS: J'ai testé WNDPROC myCallBack, ca marche po...
robUx4
M'enfin cette solution ne fonctionne pas, puisque dans le cas de Windows, je ne maitrise pas les prototypes des callback !
M'enfin il y a une bidouille qui consiste à passer en lParam un pointeur sur l'objet. Et dans ce cas (callback Windows) ca fonctionne !
robUx4
Pour le WinProc, je dirais
class toto {
//...
private :
friend WNDPROC myCallBack;
//...
}
oliv5
Et comment tu fais si tu dois utiliser une fonction callback procedure de fenetre (type WndProc)??? Je veux dire : tu fais un createwindow() dans une classe (ex: classe de creation de fenetre), tu dois lui passer le nom d'une fonction callback. Si tu veux que cette callback soit une fonction de cette classe, tu fais comment ???
SoWhatIn22
Bon, alors sous windows il est impossible qu'une fonction membre soit une callback car elle ne respecte pas la convention d'appel.
Sous win, la convention d'appel d'une call back est:
type_retour (__stdcall *)( int toto1, etc...)
donc le type de retour est celui que tu veux, les arguments sont ceux que tu veux...
Ce qu'il est possible de faire, et c'est ce que moi je fais, c'est que tu déclare une fonction externe ( qui a cette convention d'appel ) comme amie de la classe. Et tu passes à cette fonction un pointeur sur l'objet.
Un exemple pour être plus clair:
Les fonctions membres statiques n'ont pas besoin de "this".
robUx4
Désolé?
En fait le type de la fonction C "test" est figé (dans cet example non, mais en fait mon but est de faire des callback pour Windows). Donc j'essaie de passer une méthode en pointeur de fonction.
Après diverses recherches, il semble que ce soit impossible, parce qu'en fait le compilateur (tous?) ajoute dans la liste des paramètres "this" pour une méthode C++. En C il est donc impossible de passer cette méthode comme Callback. J'ai lu ca sur plusieurs sites différents...
Pour mon pb sous Windows, une solution peut-être d'utiliser la classe CWinApp des MFC. Mais comme je veux pas utiliser les MFC, je vais essayer de me débrouiller autrement... Déjà la classe CWindow (pas MFC je pense) m'aidera bien à rendre du code C++ mélangé avec du C (MeuhMeuhTV) en un meilleur code C++.
:D
SoWhatIn22
comprends rien....
c quel prototype est figé????
c'est lequel que tu voudrais changer???
pas claire, ta question...
robUx4
Un début de réponse à cette adresse (en anglais) :
Voila. Je cherche à faire un truc simple (pour ensuite l'intégrer dans un truc plus gros) :
Appeler une méthode C++ en C. J'ai trouvé un truc qui le fait. Mais ca correspond pas à ce dont j'ai besoin. Puisque le prototype en C est figé (pointeur de fonction utilisant une callback dans Win32).
Voici un exemple de code qui marche pas :
class tstCPP {
public:
inline tstCPP() {}
inline ~tstCPP() {}
En gros le prototype de la fonction test est figé, et j'aimerai arriver à lui donner qqchose (comme pointeur de fonction) qui corresponde bien à un truc différent suivant l'instance de l'objet...