Autore Topic: Come sapere il nome del Modulo Chiamante?  (Letto 773 volte)

Offline jockerfox

  • Gambero
  • **
  • Post: 76
    • Mostra profilo
Come sapere il nome del Modulo Chiamante?
« il: 02 Settembre 2013, 15:24:14 »
Domandina un po difficilina..  ;D
Abbiamo il seguente:

Citazione da: Modulo1
Public sub FunzionePippo()
...
Modulo2.FunzionePaperino()
...
End

Citazione da: Modulo2
Public sub FunzionePaperino()
...
Print <il chiamante>
...
End

Citazione da: FMain
...
Modulo1.FunzionePippo()
...

Come faccio a sapere chi è il chiamante?
In questo caso il Chiamante è Modulo1. Infatti Modulo1 chiama la funzione "FunzionePaperino" in Modulo2.
Chiaro, no?
:-)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #1 il: 02 Settembre 2013, 15:56:49 »
Interessante... ma sarà possibile in assoluto ?
Non sarà forse necessario che il chiamante trasmetta al chiamato una esplicita traccia di sé ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #2 il: 02 Settembre 2013, 16:44:08 »
La cosa in teaoria sarebbe possibile, in quanto gambas ha ovviamente traccia di tutti i passaggi.
Tanto per fare un esempio, basta guardare il trace emesso da Error.

Il problema, da me anche affrontato a suo tempo, è che attualmente non esistono funzionalità on-line per vedere questa trace.
Per farlo sarebbe da intervenire sui sorgenti di gambas, ma qui diventa un'altro discorso.

Una possibile soluzione è quella di gestire il tutto a livello di Event, in quanto esiste la keyword LAST che ti permette di sapere chi ha chiamato una certa funzione. Non sò se questo è possibile anche senza gestiore eventi, ovvero se LAST funziona anche con la sola chiamata diretta della funzione, dovresti provare, io non l'ho mai tentato...

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #3 il: 02 Settembre 2013, 16:59:52 »
Ho provato il tuo suggerimento di Last, ponendo come segue questa parola nel Modulo chiamato dal Modulo chiamante:
Codice: gambas [Seleziona]

' Gambas module file


Public Sub m2()
  
   Print Object.Type(Last)
  
End


...ma il risultato in console è:  FMain

 :-\

(da tenere conto che la sequenza è: FMain chiama Modulo1, il quale chiama il Modulo2)

« Ultima modifica: 02 Settembre 2013, 19:19:30 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #4 il: 03 Settembre 2013, 10:19:45 »
Ho posto la questione nella Mailing List ufficiale di Gambas, ed ho ottenuto una prima risposta:

" If I haven't misunderstood, doesn't
        
Codice: gambas [Seleziona]
System.Backtrace[1]

provide exactly that?

But, note that the project will need to be compiled with "Keep debugging information" option set.

hth
Bruce
"

...ovviamente da verificare.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #5 il: 03 Settembre 2013, 10:30:16 »
Mmmmmm, potrebbe essere proprio quello che cerca jocke...
E' da un pò che non metto mano a gambas, è probabile che siano apparse nuove funzionalità. Forse con System sono emerse funzionalità fino ad ora ad esclusivo uso dell'interprete...

Riguardo alla tua prova, le due funzioni erano dentro lo stesso file FMain?
In ogni caso, LAST ritorna l'oggetto chiamante e non il suo metodo... (non avevo specificato questa cosa nella mia precedente...).

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #6 il: 03 Settembre 2013, 10:40:52 »

Riguardo alla tua prova, le due funzioni erano dentro lo stesso file FMain?

In FMain v'è una chiamata alla funzione del primo Modulo; nel primo Modulo v'è la chiamata alla funzione del secondo Modulo.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Come sapere il nome del Modulo Chiamante?
« Risposta #7 il: 03 Settembre 2013, 13:04:12 »
Mmmmmm, potrebbe essere proprio quello che cerca jocke...


Eh, sì, ho fatto una prova. E' proprio quello che lui cercava !  :)
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »