VBREP
Messages postés69Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention 4 mars 2007
-
21 avril 2005 à 16:38
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
21 avril 2005 à 17:23
salut à tous
j'ai mis api SetTimer dans 1 class pour faire un dll
lors de la compilation : erreur de compilation " utilisation incorrecte de l'operateur AddressOf"
ce que j'ai ou que l'on ma presenter
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.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 21 avril 2005 à 17:10
n'empêche que tu dois le mettre en Public.
que tu peux faire appel à AdressOf directement.
que dans "AddressOf NomDu Sub" c'est pas très bon non plus.
et faut pas oublier le KillTimer à la fin.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 avril 2005 à 17:23
Pas besoin de t'énerver VBREP !
Ce que veux sûrement dire Gobillot, c'est que pour utiliser AddressOf,
il faut que la fonction soit dans une zone de mémoire non modifiable,
et donc, elle ne peux pas se situer dans un module de classe vu que
celui-ci peut être instancié, et donc, les adresses des fonctions sont
variables.
Donc, il faut mettre ta fonction dans un module classique, et y faire
appel à partir du module de classe de ta dll (le module classique étant
dans le projet de ta dll bien entendu !).
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/