Hejsan! En liten kommentar Pice of cake. Tusen tack för all hjälp, nu funkar det ju utan några som helst problem!! Lite kort om det. Aha!!! Nu föll slanten ner... Eller om det var ett ljus som gick upp. Nyfiken hur löste du det ? Funkade ByVal eller blev det Friend lösningen. Det är löst med Friend. Byval och ref gör ingen skillnad. Det är för att proceduren är publik som du inte får lov att ha en UDT som argument.UDT - problem att skicka med som referens till funktion
Jag har en global modul där jag har definierat upp en egendefinierad typ:
<code>
Public Type udtData
strId As Integer
strTitel As String
strPlats As String
strPath As String
strSokOrd As String
intDatum As Integer
strText As String
End Type
</code>
och i en Sub i programmet har jag följande kodsnutt:
<code> Dim data As udtData
' Läs in data och kontrollera innehåll
If LasIndata(data) Then</code>
LasIndata i sin tur är definierad som:
<code>
Function LasIndata(ByRef data As udtData) As Boolean</code>
Men här får jag ett kompileringsfel som lyder:
'Only public user defined types defined in public object modules ca be used as parameters or return types for public procedures of class modules or as fields of public user defined types.'
Och som den nybörjare jag är, så tycker ju jag att jag uppfyller kravet, men jag kanske feltolkar kompileringsfelet?
Alla tips är varmt välkomna!
Mvh,
GunillaSv: UDT - problem att skicka med som referens till funktion
< Function LasIndata(ByRef data As udtData) As Boolean
Du behöver inte skriva ByRef det blir det automatiskt.
Testa : Function LasIndata(ByVal data As udtData) As Boolean
Sen om du inte redan har det så,bör LasIndata ligga i samma basmodul som din Type udtData
strId As Integer bör vara strId As Long.
Tycker fö som du att det ser Ok ut,borde inte generera kompilerings Error.
Hur kompilerar du PCod eller Native FastCod ?Sv: UDT - problem att skicka med som referens till funktion
Deklarera funktionen som Friend. ;o)
<code>
Friend Function LasIndata(ByRef data As udtData) As Boolean
End Function
</code>Sv: UDT - problem att skicka med som referens till funktion
Eller rättare sagt, nu kan jag gå vidare och ta hand om alla andra buggar... ;)
Dessutom ska jag läsa på lite vad 'Friend' betyder... Kan inte vara bra att använda saker som man egentligen inte vet vad de gör...
Mvh,
GunillaSv: UDT - problem att skicka med som referens till funktion
I vb 6 finns det tre sätt att exponera funktioner, subrutiner och egenskaper från en klass, som ett formulär är.
Dessa är:
Private
Funktion kan bara anropas innom klassmodulen
Friend
Funktionen kan anropas inom projektet
Public (Dafault om inget anges)
Funktionen kan anropas utanför projektet. I t.ex ActiveX projekt.Sv: UDT - problem att skicka med som referens till funktion
Tack Andreas för din enkla, och informativa förklaring!
Jag hade faktiskt ingen aning (eller så har jag bara inte registrerat det) att Public var default, men nu lär jag inte glömma det i första taget.
Det finns nog en del nackdelar med att läsa på distans, men samtidigt kan det ju vara positivt, för man får ju verkligen jobba för att hitta information själv!
Mvh,
GunillaSv: UDT - problem att skicka med som referens till funktion
Sv: UDT - problem att skicka med som referens till funktion