Delegate, SetTimer et AddressOf)

[Résolu]
Signaler
Messages postés
8
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
25 avril 2006
-
Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
-
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

6 réponses

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
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.
Messages postés
8
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
25 avril 2006

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
Messages postés
8
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
25 avril 2006

merci pour ton aide, je vais voir pour utiliser la fonction timer de System.threading.
je te tiens au courant des mes avancees
Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
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 ^_^