VB6.0 Comment connaitre nom de procédure/function en exécution?

Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006
- - Dernière réponse : cs_DURANDO
Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006
- 17 mars 2006 à 10:10
Bonjour à tous.



Je développe une appli sous VB 6.0 dans laquelle j'ai utilisé des
fichiers .INI pour paramétrer mes controls (NB controls, couleurs,
leurs animation, etc...)



Donc chaque fois que je veux paramétrer j'utilise ma fonction suivante :

Public Function LitFichierIni(Section As String, cle As String, ByVal FICHIER As String, _

Optional Valeur As String = "", Optional Sender As String, Optional TypeData As String) As String

Dim strReturn As String

Dim FichierLog As String

strReturn = String(255, 0)

GetPrivateProfileString Section, cle, Valeur, strReturn, Len(strReturn), FICHIER

LitFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1)

If Not (LitFichierIni > "") And (InStr(1, cle, "F") = 0) Then

'MsgBox "Erreur Paramétrage Dans :" & FICHIER
& Chr(13) & " Section : " & Section & " ou clé : "
& cle & " Non trouvée!"

FichierLog = Chemin & "LOG/PARAMETRAGE.LOG"

Open FichierLog For Append As #1

Print #1, Now

If Not IsMissing(Sender) Then Print #1, "Element appelant :"; Sender

Print #1, "Erreur Paramétrage Dans :"; FICHIER

Print #1, " Section : "; Section, " ou clé : "; cle, " Non trouvée!"

Close #1

End If

If Not IsMissing(TypeData) And Not (LitFichierIni > "") Then

Select Case TypeData

Case "Integer"

LitFichierIni = "0"

Case "String"

LitFichierIni = "?????"

End Select

End If

End Function



Un exemple d'appel de ma fonction :

ctl.X1 = LitFichierIni(ctl.name, "LEFT" & SIndex, FICHIER, , "Page_Synoptique/Position1", "Integer")



Voila mon soucis:

Lorsque j'appelle ma fonction et que le paramètrage est mal fait,
j'envoi l'erreur dans un fichier log (FichierLog). Actuellement, dans
mon paramétre "Sender", j'inscris texto, l'endroit ou à été réalisé
l'appel de la fonction pour retrouver facilement par la suite.



Question :

Existe-t-il une methode permettant d'inscrire dans une string le
nom de la procédure ou fonction dans laquelle on se trouve pendant
l'éxécution ?

un truc du genre : ME.sub.name



Si quelqun a une idée, merci d'avance!






C'est pas parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.
Afficher la suite 

2 réponses

Messages postés
14
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
21 juin 2007
0
Merci
Ce que je te propose, c'est de déclarer une constante SubName avec la valeur du nom de la procédure ou fonction et ce dans chaque sous-programme. Si tu regarde bien c'est juste 1 ligne de code à rajouter :

const SubName="Nomfonction/proc"

Tu peux y accéder par la suite avec cette constante SubName.

Par contre, pense à renommer cette constante si par la suite tu changes le nom de ta(tes) procédure(s) ou fonction(s).
Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006
0
Merci
En effet, c'est une bonne idée.

J'avais oublié une précision, si ma fonction est appelée plusieurs fois
dans une sub par exemple, je'indique un incrément à la suite du nom
dans sender :

1 ier appel : LitFichierIni(ctl.name, "LEFT",FICHIER, , subname0, "Integer")

2 ieme appel : LitFichierIni(ctl.name, "LEFT",FICHIER, , subname1, "Integer")



Suite à ta proposition, je pense que je vais passer une variable byref
qui sera incrémentée par ma fonction. Je l'initialiserai en début de
"sub".

Ca devrait resembler à ca:

1 ier appel : LitFichierIni(ctl.name, "LEFT",FICHIER, , SubName,idx, "Integer")



Dans ma fonction :

If Not IsMissing(Sender) Then

Print #1, "Element appelant :"; Sender & str(idx)

Idx = Idx + 1

End if





Merci.

C'est pas parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.