Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: funktiolla useampi output variable? (vb6)

eakem [25.12.2003 16:38:54]

#

Voiko funktiolle määrittää useamman ulostulevan muuttujan, että saisi yhdellä funktiokutsulla haettua useamman tarvittavan arvon? Jos voi, miten funktio määritellään? Esimerkki olisi hyvä...
Saakos sub:n palauttamaan arvoja?

sooda [25.12.2003 17:04:08]

#

ei mun tietääkseni. Ja subi on functio joka ei palauta mitään. Jos haluat subin palauttamaan jotain ni teet vaan samanlaisen function.

Antti Laaksonen [25.12.2003 17:09:00]

#

Tässä on esimerkki, joka toimii ainakin VB6:ssa.

Private Type TIEDOT
    eka As Integer
    toka As Long
    kolmas As String
End Type

'oman tietotyypin palauttaminen
Private Function MoniPalautus1() As TIEDOT
    Dim palautus As TIEDOT
    palautus.eka = 12
    palautus.toka = 837634
    palautus.kolmas = "testi"

    MoniPalautus1 = palautus
End Function

'taulukon palauttaminen
Private Function MoniPalautus2() As Variant
    Dim palautus(3) As Variant
    palautus(0) = 4
    palautus(1) = 63
    palautus(2) = 18
    palautus(3) = 55
    'tai: palautus = Array(4, 63, 18, 55)
    MoniPalautus2 = palautus
End Function

Sub Form_Load()
    Dim tiedot1 As TIEDOT
    Dim tiedot2() As Variant

    tiedot1 = MoniPalautus1
    tiedot2 = MoniPalautus2

    MsgBox tiedot1.toka '837634
    MsgBox tiedot2(1) ' 63
End Sub

Huomaa, että tietotyypin palauttavan funktion täytyy olla paikallinen (Private) ja taulukon palauttavassa funktiossa taulukon tyypin täytyy olla Variant.

eakem [25.12.2003 20:50:58]

#

Hyvä. Kiitos vinkeistä!

MikaM [27.12.2003 16:37:04]

#

Jos function tai aliohjelman parametrit varustaa ByRef määreellä (oletus vb6) niin tällöin välitetään vain osoitin muuttujaan (pointteri), jolloin kaikki parametriin tehdyt muutokset heijastuvat myös kutsukohtaan, eli pieni esimerkki:

' Tässä aliohjemassa luodaan kaksi muuttujaa, jotka lähetetään
' aliohjelmalle, jonka parametrit on ByRef (by reference) määreellä.
' Aliohjelma (OmaViitaus) sijoittaa muuttujiin arvot ja ne heijastuvat
' kutsukohdan muuttujiin
Private Sub Kutsuja()
    Dim strNimi As String
    Dim iIka As Integer

    ' käydään "täyttämässä" muuttujat
    OmaViittaus strNimi, iIka

    ' tulostetaan muuttujien arvot
    Debug.Print strNimi & "," & iIka

End Sub

Private Sub OmaViittaus(ByRef strNimi As String, ByRef iIka As Integer)
    strNimi = "Matti Meikäläinen"
    iIka = 60
End Sub

Taulukot, oliot, tyypit ja komponentit (esim. ComboBox) menevät aina referenssinä.

Eli vastaus siihen voiko functiolle/sub määrätä useamman kuin yhden ulostulevan arvon niin vastaus on: kyllä.

Luettavuuden ja ylläpidettävyyden kannalta yllä oleva esimerkki ei ole hyvä. Parempi olisi tehdä OmaViittaus subista functio. Functio palauttaisi esim. Collection, joka sisältäisi pyydetyt arvot.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta