Delegate, SetTimer et AddressOf)

Résolu
vinscoco Messages postés 8 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 25 avril 2006 - 21 mars 2006 à 16:51
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 24 avril 2008 à 22:48
bonjour,
je voudrais avoir quelques precision concernant une partie de code que je dois faire passer de VB6 a VB.Net.

dans un premier temps, voici les déclarations de fonctions de l'API que j'utilise.


Delegate
Function SubClassProcDelegate(
ByVal hwnd
As
Integer,
ByVal msg
As
Integer,
ByVal wParam
As
Integer,
ByVal lParam
As
Integer)
As
Integer



Public
Declare
Sub CopyMemory
Lib "kernel32"
Alias "RtlMoveMemory" (
ByRef lpvDest
As
Object,
ByRef lpvSource
As
Integer,
ByVal cbCopy
As
Integer)



Public
Declare
Function SetTimer
Lib "user32" (
ByVal hwnd
As
Integer,
ByVal nIDEvent
As
Integer,
ByVal uElapse
As
Integer,
ByVal lpTimerFunc
As SubClassProcDelegate)
As
Integer

voici la ligne de code qui semble ne pas fonctionner


TmrLong = SetTimer(0, 0, IntervalleSz,
AddressOf MinuteurProc)

voici la declaration de MinuteurProc :


Public
Function MinuteurProc(
ByVal hwnd
As
Integer,
ByVal uMsg
As
Integer,
ByVal iEvent
As
Integer,
ByVal iTime
As
Integer)
As
Integer

je me pose 2 question :
- la fonction MinuteurProc est elle bien lance lors du (adressOF MinuteurProc)?

Si oui, pourquoi, dans mon cas ne se lance-t-elle pas?

Merci par avance de votre aide

Vincent
A voir également:

6 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
21 mars 2006 à 19:37
Si tu travailles avec la version 2 de .net regarde dans la msdn la classe Timer dans le namespace System.Threading. Et oublis SetTimer.
Sinon domage :)
Tu l'utilises ou ton délégué ? tu peux mettre une partie de minuteurproc ?

Par contre pour CopyMemory il y a la classe Marshal qui permet de manipuler dans des espaces mémoires non managés.
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
21 mars 2006 à 19:43
Arf j'ai parlé trop vite.
La classe Timer existe bien dans System.Threading je viens de tester. Suit cette voie plutot que d'utiliser SetTimer, il doit y avoir des exemples dans la msdn.
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
21 mars 2006 à 17:15
La signature de SetTimer est incorrect.
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As IntPtr, ByVal nIDEvent As UIntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As SubClassProcDelegate) As UIntPtr

Utilisation de SetTimer:
Dim TmrLong as UIntPtr
TmrLong = SetTimer(IntPtr.Zero, 0, CType(IntervalleSz, UIntPtr), AddressOf MinuteurProc)

Pour savoir si MinuteurProc est appelé tu peux mettre un point d'arrêt dans MinuteurProc.
0
vinscoco Messages postés 8 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 25 avril 2006
21 mars 2006 à 17:41
Merci pour cette reponse. ma deuxieme question en fait est : lors d'un tel appel

TmrLong = SetTimer(IntPtr.Zero, 0, CType(IntervalleSz, UIntPtr), AddressOf MinuteurProc)

peux-tu me confirmer que je suis censé rentrer dans la fonction ?
c'est justement car je n'y rentre pas que je pose la question
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vinscoco Messages postés 8 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 25 avril 2006
22 mars 2006 à 09:37
merci pour ton aide, je vais voir pour utiliser la fonction timer de System.threading.
je te tiens au courant des mes avancees
0
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
24 avril 2008 à 22:48
Bonjour,

Pourriez vous m'expliquer le rôle et fonctionnement de "AddressOf" s'il vous plait ?

J'adapte un module en module de classe.
Dans le module il y a un AddressOf NomProc
Call SetWindowLong (mhWnd, GWL_WNDPROC, AddressOf WindowProc)

Je le copie dans mon module de classe et la ca ne marche plus =(
message d'erreur : Utilisation incorrecte de l'operateur AddressOf

En sachant que j'ai déclaré la fonction suivante plus bas dans le module de classe
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Si vous avez une explication merci ^^

Vive le VB6 ^_^
0
Rejoignez-nous