Newsgroup: it.comp.lang.visual-basic
Titolo: Valori di ritorno da una Function

Salve a tutti
In un progetto ho costruito una classe dove è contenuta una Function come
di seguito:
Public Function Ritorno(Input1 As Integer, Input2 As Integer, Input3 As
Integer, ValoreRitorno1 As Long, ValoreRitorno2 As Long, ValoreRitorno3 As
Long) As Variant
  ValoreRitorno1 = a * Input1
  ValoreRitorno2 = b * Input2
  ValoreRitorno3 = c * Input3
End Function
E' possibile dalla maschera passare i valori ai parametri Input1 , Input2
, Input3
ed ottenere i valori di ritorno ValoreRitorno1 , ValoreRitorno2 ,
ValoreRitorno3 ?
grazie
	giuseppeD
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Passa byref le variabili che vuoi che tornino modificate.
Alberto

 Alberto
Non riesco a trovare il metodo.
Ho costruito una classe (cl1) come di seguito:
Public Function Ritorno(x1 As Integer, x2 As Integer, x3 As Integer, ByRef
y1 As Long, ByRef y2 As Long, ByRef y3 As Long) As Variant
  y1 = 2 * x1
  y2 = 3 * x2
  y3 = 4 * x3
End Function
Da una maschera nell'evento click di un pulsante:
Private Sub Command1_Click()
  Dim c As cl1
  Set c = New cl1
  Dim y1 As Long, y2 As Long, y3 As Long
  y1 = c.Ritorno(1, 2, 3)
  Set c1 = Nothing
End Sub
Ottengo il seguente messaggio:
Argument not optional
Sono al punto di partenza


Scusa, ma hai guardato nell'help cos'è byref ??
Te lo chiedo perchè da come hai usato la chiamata ho l'impressione che tu
non abbia mai visto neppure uno dei duemila esempi che ci sono in MSDN...
Prova così:
Private Sub Command1_Click()
  Dim c As cl1
  Set c = New cl1
  Dim y1 As Long, y2 As Long, y3 As Long
  Call c.Ritorno(1, 2, 3,y1,y2,y3)
  Set c1 = Nothing
End Sub
Alberto

 Alberto
Grazie della risposta risolutiva.
Completo il codice nel caso serva ad altri.
Private Sub Command1_Click()
  Dim c As cl1
  Set c = New cl1
  Dim x1 As Long, x2 As Long, x3 As Long
  Dim y1 As Long, y2 As Long, y3 As Long
  Call c.Ritorno(1, 2, 3, y1, y2, y3)
  x1 = y1
  x2 = y2
  x3 = y3
  Set c = Nothing
End Sub


   x3 = y3
[SNIP]
Ehmmm.... Scusa se ti sembro pedante, ma l'esempio di Alberto era gia'
"completo", mentre dal tuo codice (magari sto interpretando male io...) ho
il sospetto che non ti sia ancora del tutto chiaro il concetto di "passare
per riferimento"
Quelli che hai definito nella funzione non sono, in senso stretto, "valori
di ritorno" come accennavi all'inizio ma appunto variabili passate per
riferimento; questo meccanismo ti consente di modificare, internamente alla
routine, i valori contenuti e fare in modo che le modifiche si riflettano
anche sulle variabili di origine, questo proprio perche'"y1" all'esterno e
"y1" all'interno (che, nota bene, potrebbero avere due nomi diversi tra
loro) sono per l'appunto due riferimenti alla stessa area di memoria.
Il altre parole quello che fai e' dire alla routine "ecco tre contenitori
vuoti (o anche pieni), quando hai finito voglio trovarci i valori che mi
servono", quindi non hai bisogno di definire come qui sopra tre variabili
solo per ricevere il risultato e altre tre dove copiarlo per poi
lavorarci... tanto e' vero che se nel tuo esempio non ti interessano piu' i
valori di input, potresti usare solo 3 parametri a cui far fare le veci di
input e output contemporaneamente:
nella classe avresti
Public Sub Ritorno(ByRef p1 As Long, ByRef p2 As Long, ByRef p3 As Long)
    'nota... e' inutile definire una funzione dato che il risultato non
    'viene passato che tale, ma servendosi appunto delle variabili per
riferimento
  p1 = 2 * p1
  p2 = 3 * p2
  p3 = 4 * p3
End Function
e nel pulsante
Private Sub Command1_Click()
  Dim c As cl1
  Dim x1 As Long, x2 As Long, x3 As Long
  Set c = New cl1
  x1 = 1
  x2 = 2
  x3 = 3
  Call c.Ritorno(x1, x2, x3)
  'ora x1, x2 e x3 contengono i valori modificati
  Set c = Nothing
End Sub
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown