Appel de fonction par call

Signaler
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
Existe-t'il  un moyen de savoir si dans un fonction l'appel a été réalisé sous la forme "valeur_retour = MaFonction" ou "Call MaFonction", et ce directement dans la fonction elle-même ?

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Je ne pense pas, non.
Mais explique ce que tu veux faire ou quel est ton problème, il y a surement une autre méthode.
De toute façon, si tu fais un Call et que tu renvoies une valeur par "valeur_retour = MaFonction", la valeur_retour sera perdue, mais rien de plus.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Je suis en train de développer une classe dont la plupart des méthodes sont des fonctions qui renvoie un code erreur à partir d'une liste d'énumération.

Je part du prédiquat suivant: si l'utilisateur appel la fonction en récuperant la valeur de retour, toutes les erreurs éventuelles de la fonction lui sont comuniquées via la variable de retour de la fonction. Par contre lorsqu'il appelle la fonction par un simple call (dans le cas où il serait possible de le détecter dans la fonction), je considère que l'utilisateur ne désire pas filtrer les erreurs, et ces erreurs seront renvoillés en erreurs de classe via la méthode raise de l'objet Err.

On peut voir un comportement similaire avec la fonction Error de VB. Dans la fenêtre d'exécution si on fait "? error(n)" VB renvoie le libellé de l'erreur dans la fenêtre. Par contre si on fait "error n", il affiche un messagebox avec le libellé. Deux façon d'appeler, deux comportements différents. Le tout est de savoir comment il fait !
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
désolé mais il n'y a pas de différence de traitement ou d'évènement entre ces 2 instructions

s = Error(1)
Call Error(1)

il en est de même pour msgbox ou autre....
ton "? function" n'est ni plus ni moins qu'un "debug.print fonction", donc un "call".

c'est vrai que de savoir si on récupère ou non le retour, çà pourrait éviter parfois un traitement.
à la limite tu peux ajouter un paramètre....

maintenant d'une faut vraiment en avoir l'utilité, et de deux encore faut-il se souvenir que la fonction requiert un param supplémentaire pour lui éviter certaines opérations...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
D'un autre coté, l'utilisateur qui utilise ta classe, doit savoir qu'il fait appel à des fonctions qui renvoient en retour un code d'erreur.
S'il choisit délibérement d'appeler la fonction par un Call, c'est que le code d'erreur ne l'interresse pas. J'imagine bien dans ce cas que l'affichage d'une MessageBox ne devrait pas trop l'interesser non plus.

Au niveau de tes fonctions, je ne pense pas que ce soit détectable. Car même avec un Call, tout le mécanisme de retour de valeur est mis en place. Le fonctionnement est strictement identique du point de vue de la fonction. Seulement, au lieu de retourner la valeur dans une variable de ton programme, une variable "fantome" est crée sur la pile, c'est elle qui va recevoir la valeur de retour
Après le retour, cette variable est simplement détruite sans etre utilisée.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #