Api dans dll

VBREP Messages postés 69 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 4 mars 2007 - 21 avril 2005 à 13:48
VBREP Messages postés 69 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 4 mars 2007 - 21 avril 2005 à 15:45
salut à tous
j'ai mis api settimer dans la class pour faire un dll

lors de la compilation : erreur de compilation " utilisation incorrecte de l'operateur AddressOf"

que faire et pourquoi ?

merci d'avance

5 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
21 avril 2005 à 14:00
Il faut faire un wrapper pour AddressOf, car tu ne peux pas l'utiliser directement dans un appel d'API, qui attend un Long.

' Fonction : GetFuncAdr
' Auteur : Christophe RENAUD
' Objet : Retourne l'adresse d'une fonction. En effet, le mot-clé 'AddressOf' ne peut être utilisé directement
' Arguments : ByVal Adr As Long : Adresse de la fonction
' Retour : Long : L'adresse de la fonction
'
Private Function GetFuncAdr(ByVal Adr As Long) As Long
' C'est idiot mais totalement indispensable
GetFuncAdr = Adr
End Function

Et tu t'en sert comme cela :
SetTimer(..., ..., ..., GetFuncAdr(AddressOf Le nom de ta fonction))

Il n'y a pas de fonction plus con de GetFuncAdr, mais la syntaxe de AddressOf la rend obligatoire : Ceci est du au fait que, en VB, AddressOf est un opérateur et non pas une fonction (pas de parenthèses). Et une API ne peut recevoir un Opérateur en tant que argument.

Christophe R
0
VBREP Messages postés 69 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 4 mars 2007
21 avril 2005 à 15:05
ques un wrapper ?
du cou je met quoi

SetTimer Form1.hwnd, 5 , 1000 , addressof NomduSub = erreur
SetTimer Form1.hwnd, 5 , 1000 , adr NomduSub = erreur
SetTimer Form1.hwnd, 5 , 1000 , GetFuncAdr NomduSub = erreur
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
21 avril 2005 à 15:17
Un wrapper c'est un truc qui en masque un autre mais qui ne fait rien "d'intelligent" par lui-même.

Tu dois mettre ceci :
SetTimer(Form1.Hwnd, 5 , 1000, GetFuncAdr(AddressOf LeNomDeTaSub))

Remplace "LeNomDeTaSub" par le nom de la Sub que ton Timer doit appeler.

Christophe R
0
VBREP Messages postés 69 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 4 mars 2007
21 avril 2005 à 15:22
encore 1 pb

erreur de compilation "Attendu ="
0

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

Posez votre question
VBREP Messages postés 69 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 4 mars 2007
21 avril 2005 à 15:45
SetTimer Form1.hwnd, 5, 1000, GetFuncAdr(AddressOf NomDu Sub) =
erreur de compilation "Utilisation de l'operateur AddressOf"
et si SetTimer (Form1.hwnd, 5, 1000, GetFuncAdr(AddressOf NomDu Sub)) erreur de compilation "Attendu"
0
Rejoignez-nous