Nom d'une fonction dans une variable

Résolu
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 - 31 mai 2007 à 15:37
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 - 1 juin 2007 à 21:04
Bonjour à tous

Peut on mettre le nom une fonction dans une variable ????
afin que selon le parametre que l'on entre dans l'argument de Essai il appelle la fonction correspondante sans faire de "select case"

Function Essai(Fonction as ???)
 
 Fonction(a,b)
 
End Function

Merci de votre aide

17 réponses

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
31 mai 2007 à 15:49
Re,
Petit exemple pour illustrer (tout dans le formulaire)

Private Sub Form_Load()
Call CallByName(Me, "HelloWorld", VbMethod, "COUCOU")
Call CallByName(Me, "ByeBye", VbMethod, "COUCOU")
End Sub<hr />

Public Sub HelloWorld(Param As String)
   Call MsgBox(Param)
End Sub<hr />
Public Sub ByeBye(Param As String)
   Call MsgBox(Param)
   End
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 15:39
ou bien peut on faire un style d'alias ????
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
31 mai 2007 à 15:44
Essaie avec CallByName

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 mai 2007 à 15:46
Non, pas possible.

Mais tu peux passer un parametre et dans la procedure suivant la valeur du parametre, appeler la bonne fonction.

Function toto( titi as boolean) as integer
   
    if titi = True then
       call fontion_titi()
    else
       call fonction_pas_titi()
    end if
end function

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

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

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 mai 2007 à 15:47
oupsss, CallByName, je l'avais oublier celui-là

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 15:53
Merci beaucoup de vos réponses
@Casy


Justement le probleme c'est que je ne voulais pas avoir a referencer tous les codages que j'aurais en DLL, surtout qu'il peut y en avoir des nouveaux, et il faudrais que je modifie et rajoute a chaque fois le code source.


C'est pourquoi je ne voulais pas faire de choix style select case ou if else,
mais merci quand meme

@Jrivet


CallByName,  je connaissais pas
Je ne sais pas du tout comment l'utiliser, je vais chercher ....

Encore merci a vous deux
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 15:55
A bah tu as posté en meme temps que moi
Je regarde ça tout de suite pour voir si je comprend
Merci beaucoup
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 16:16
Jrivet tu est un ange


C'est exactement ce que je voulais


Mille merci


 
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 17:02
J'suis dégouté ça marche nickel avec une procedure interne, mais pas avec une procedure dans une DLL.

Est ce normal ???
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
31 mai 2007 à 17:06
Re,
Oui car le premier parametre est l'objet contenant la fonction (d'apres ce que j'ai compris)
Il faut donc que la procédure à appeler sois dans un objet (donc ps de mosule par exemple)

Place le code que tu utilises pour que l'on puisse t'aider un peu plus.

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 17:13
Voici le code :

Private Declare Function lstrcpy Lib "Kernel32" (ByVal lpString1 As Any, ByVal lpString1 As Any) As Long
Public Declare Function CryptageP1M1 Lib "P1M1.dll" (ByVal a As String) As Long
Public Declare Function DecryptageP1M1 Lib "P1M1.dll" (ByVal a As String) As Long

Public Sub Form_Load()
 
 Codage = "P1M1"
 PhraseACoder = "Coucou"
 MsgBox PhraseACoder, vbOKOnly, "Phrase d'originale"
 PhraseCoder = CoderAlpha(Codage, PhraseACoder)
 MsgBox PhraseCoder, vbOKOnly, "Retour Dll phrase codée par " + Codage
 PhraseDecoder = DecoderAlpha(Codage, SupCabalistiqueFinal(PhraseCoder))
 MsgBox PhraseDecoder, vbOKOnly, "Retour Dll phrase décodée par " + Codage
 
End Sub



'                   CODAGE/DECODAGE ALPHANUMERIQUE
'                   ******************************



Function CoderAlpha(Codage , PhraseACoder)
 
 Dim ChaineDll As String * 400
 Dim RetourDll As Long
 Dim AdresseChaine As Long
 ChDrive (Left(CurrentProject.Path, 1))
 ChDir CurrentProject.Path
 
 If Dir(CurrentProject.Path + "" + Codage + ".dll") <> "" Then
  Cryptage = "Cryptage" + Trim(Codage)
  RetourDll = CallByName(Cryptage, Cryptage, VbMethod, PhraseACoder)
  AdresseChaine = lstrcpy(ChaineDll, RetourDll)
  CoderAlpha = ChaineDll
 Else
  MsgBox "La Dll " + Codage + ".Dll" + " est absente de " + CurDir
 End If
 
End Function



Function DecoderAlpha(Codage, PhraseADecoder)
 
 Dim ChaineDll As String * 400
 Dim AdresseChaine As Long
 Dim RetourDll As String
 ChDrive (Left(CurrentProject.Path, 1))
 ChDir CurrentProject.Path
 
 If Dir(CurrentProject.Path + "" + Codage + ".dll") <> "" Then
  Decryptage = "Decryptage" + Trim(Codage)
  RetourDll = CallByName(Me, Decryptage, VbMethod, PhraseADecoder)
  AdresseChaine = lstrcpy(ChaineDll, RetourDll)
  DecoderAlpha = ChaineDll
 Else
  MsgBox "La Dll " + Codage + ".Dll" + " est absente de " + CurDir
 End If
 
End Function





Encore merci
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 17:16
J'avais remplacé ton "Me" par cryptage mais ça fait pas mieux
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
31 mai 2007 à 18:23
Dans la phrase :
RetourDll = CallByName(Cryptage, Cryptage, VbMethod, PhraseACoder)
Et j'ai oublié de remettre private au deux declarations que j'avais mises dans un module standard.

Merci de ton aide
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 juin 2007 à 08:09
Salut,

ATTENTION CallByName ne peux pas accéder à des procédures privées. ou alors j'ai pas compris ton dernier post.

Ensuite pour l'utiliser il faut indiquer l'objet contenant les procédures.
Dans mon exemple tout était au même endroit donc j'ai mis ME, mais pour toi je ne sais pas du tout comment faire pour taper dans les procédures d'une Dll

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 juin 2007 à 09:12
Il faut peut-etre déclarer les fonctions de la dll en utilisant DllImport plutot que les instructions Declare.

Mais je sais pas si c'est possible en VB6

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
1 juin 2007 à 21:00
J'suis dégouté, vous aviez presque trouvé.
Bon, j'espere qu'une ame charitable passera par la pour nous donner un coup de main.
En attendant je vous remercie encore de votre aide
Bonne journée
0
cs_andrebernard Messages postés 406 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
1 juin 2007 à 21:04
Au pire je vais recréer un POST pour demander comment utiliser CallByName dans une DLL, peut etre que quelqu'un connait la reponse. Vous m'avez fait avancé d'un pas, et c'est deja bien
0
Rejoignez-nous