En général, vous ne voulez pas Dispatch en fait à partir de chaînes. C'est sujet aux erreurs (car vous devez être vraiment sûr au moment de l'exécution que votre chaîne a le nom de la fonction que vous voulez), et vraiment inutile. La façon de faire ce genre de chose où vous voulez pouvoir "passer" la méthode que vous voulez utiliser serait d'utiliser le polymorphisme que possède VB, et d'utiliser une classe séparée pour chaque implémentation.
Dans le module de classe que vous utilisez pour votre interface, par exemple nommé MyInterface
:
Public Sub DoStuff()
End Sub
Ensuite, créez deux modules de classe, un pour chaque application possible de l'interface:
En MyClassOne
:
Implements MyInterface
Public Sub MyInterface_DoStuff()
Msgbox "I'm function one"
End Sub
Ensuite, dans
Implements MyInterface
Public Sub MyInterface_DoStuff()
Msgbox "I'm function two"
End Sub
Pour l'utiliser, il vous suffit de passer dans lequel la mise en œuvre que vous souhaitez utiliser:
Private Sub UseInterface(WhichThingToUse as MyInterface)
WhichThingToUse.DoStuff
End Sub
Plutôt que d'utiliser une variable de chaîne pour stocker la méthode à utiliser, vous devez stocker plutôt une New MyClassOne
ou un New MyClassTwo
. Vous ne montrez pas comment votre variable getOne
est définie, mais quelle que soit la logique, vous avez juste besoin de changer pour stocker une instance de MyInterface à la place, et l'utiliser directement.
Pour aller plus loin dans la bibliothèque MSDN:
AFAIK est la seule façon de le faire polymorphisme dans VB6 – Andrey
@Andrey : non, vous avez tout à fait tort: VB6 sait interfaces (http : //stackoverflow.com/questions/2581087).En outre, VB6 prend en charge la liaison tardive hors de la boîte de sorte que vous pouvez simplement appeler des méthodes sur des objets polymorphes (mais cela ne fonctionne plus avec 'Option Explicit'). –
comment terriblement j'avais tort. Je déteste toujours VB6 :) – Andrey