Timer C++
Fermé
Wize seeker
Messages postés
13
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
14 mars 2011
-
Modifié par Wize seeker le 13/03/2011 à 18:56
.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 14 mars 2011 à 02:17
.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 14 mars 2011 à 02:17
A voir également:
- Timer C++
- Shutdown timer - Télécharger - Personnalisation
- Multi timer - Télécharger - Bureautique
- Task timer - Télécharger - Gestion de projets
- Vlc timer - Forum Montage et acquisition vidéo
- Timer php ✓ - Forum PHP
3 réponses
.N
Messages postés
25
Date d'inscription
samedi 12 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011
561
13 mars 2011 à 21:40
13 mars 2011 à 21:40
Eh, bien, le compilateur dis tout, non?
[C++ Erreur] E2034 Impossible de convertir 'void (*)(AnsiString)' en 'void (_fastcall * (_closure )(TObject *))(TObject *)'
Ca signifie que tu fais une conversion invalide d'un pointeur sur fonction à un autre type de pointeur sur fonction...
Tu convertis un type void (_fastcall * (_closure )(TObject *))(TObject *)
en void (*)(AnsiString);
Si tu souhaites absolument effectuer la conversion tu peux toujours :
Je ne sais pas si ça fonctionnera, mais tu peux essayer.
[C++ Erreur] E2034 Impossible de convertir 'void (*)(AnsiString)' en 'void (_fastcall * (_closure )(TObject *))(TObject *)'
Ca signifie que tu fais une conversion invalide d'un pointeur sur fonction à un autre type de pointeur sur fonction...
Tu convertis un type void (_fastcall * (_closure )(TObject *))(TObject *)
en void (*)(AnsiString);
Si tu souhaites absolument effectuer la conversion tu peux toujours :
Timer1->OnTimer = (void (_fastcall * (_closure )(TObject *))(TObject *) en void (*)(AnsiString)) Afficher;
Je ne sais pas si ça fonctionnera, mais tu peux essayer.
Wize seeker
Messages postés
13
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
14 mars 2011
Modifié par Wize seeker le 13/03/2011 à 22:12
Modifié par Wize seeker le 13/03/2011 à 22:12
Merci pour votre réponse,
Je ne sais pas comment la faire, si vous pouvez m'aider ça sera bien !
Sinon, si vous avez une idée comment faire pour appeler une méthode sans passer par le Timer, je serais reconnaissant :)!
Merci infiniment,
Je ne sais pas comment la faire, si vous pouvez m'aider ça sera bien !
Sinon, si vous avez une idée comment faire pour appeler une méthode sans passer par le Timer, je serais reconnaissant :)!
Merci infiniment,
.N
Messages postés
25
Date d'inscription
samedi 12 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011
561
14 mars 2011 à 02:17
14 mars 2011 à 02:17
Bon, alors voilà... une idée pour appeler une méthode sans passer par le timer...bon d'accord.
Alors, j'ai bien l'impression que ta méthode utilise ailleurs un callback (https://fr.wikipedia.org/wiki/Fonction_de_rappel Dans ce genre de cas, on doit utiliser un modèle de fonction spécifique. Ici, dans ton cas, d'après ton compilateur, le modèle semble être :
mais toi, tu n'utilises pas ce modèle, alors que ça devrait être le cas
tu devrais donc changer ce code :
par un autre que je serais bien en peine de te dire, puisque je n'utilise pas la librairie VCL.
Mais le prototype devrait correspondre à (_fastcall * (_closure )(TObject *))(TObject *)
Ceci dit, il y a une alternative à cela, qui serais de créer un thread (tutoriel basique : http://www.siteduzero.com/tutoriel-3-3291-les-threads-et-les-mutex.html). Alors, tu pourrais, à l'intérieur de ton thread, exécuter ton «ShowMessage(msg);» à chaque 3 minutes, en utilisant par exemple un «Sleep(30000);» de la librairie <windows.h>.
Alors, j'ai bien l'impression que ta méthode utilise ailleurs un callback (https://fr.wikipedia.org/wiki/Fonction_de_rappel Dans ce genre de cas, on doit utiliser un modèle de fonction spécifique. Ici, dans ton cas, d'après ton compilateur, le modèle semble être :
void (_fastcall * (_closure )(TObject *))(TObject *)
mais toi, tu n'utilises pas ce modèle, alors que ça devrait être le cas
tu devrais donc changer ce code :
void Afficher (String msg) { ShowMessage(msg); }
par un autre que je serais bien en peine de te dire, puisque je n'utilise pas la librairie VCL.
Mais le prototype devrait correspondre à (_fastcall * (_closure )(TObject *))(TObject *)
Ceci dit, il y a une alternative à cela, qui serais de créer un thread (tutoriel basique : http://www.siteduzero.com/tutoriel-3-3291-les-threads-et-les-mutex.html). Alors, tu pourrais, à l'intérieur de ton thread, exécuter ton «ShowMessage(msg);» à chaque 3 minutes, en utilisant par exemple un «Sleep(30000);» de la librairie <windows.h>.