/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Overføre et array til en funktion byval?
Fra : kikki
Vist : 797 gange
200 point
Dato : 26-06-01 09:38

Jeg har en funktion som skal bruge et array af bytes, byval. Hvordan gør jeg dette?
Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til en string, og tilbage igen?

Kikke

 
 
Accepteret svar
Fra : gandalf

Modtaget 200 point
Dato : 26-06-01 12:03

Du kan ikke sende et array som byval, det skal altid være byref.

Du kan derimod konvertere dit array om til en variant, og så sende din variant byval.

dim minVal as variant
minVal = mitArray

**************************************
I VB kan du sagtens sætte et array lige med en string og omvendt.

minString = mitArray
mitArray = minString

Så det er der ingen ben i.

Gandalf.

Godkendelse af svar
Fra : kikki


Dato : 26-06-01 15:41

Tak for svaret Gandalf.

Kommentar
Fra : Nyhedsbruger


Dato : 26-06-01 16:01



kikki <kikki.news@kandu.dk> wrote in message
news:sYWZ6.2849$lf5.476668@news010.worldonline.dk...
> Jeg har en funktion som skal bruge et array af bytes, byval. Hvordan gør
> jeg dette?
> Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til
> en string, og tilbage igen?
>
> Kikke
>
> --
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
Hej Kikke

Nedenstående er klippet fra Word VBA hjælpfil, så
mon ikke det også gælder for VB.

Matrixer, der er erklæret med Dim, ReDim eller Static
kan ikke overføres med ByVal. Denne fejl har følgende
årsag og løsning:

· Du har forsøgt at overføre en hel matrix med ByVal.

Et enkelt element i en matrix kan overføres ByVal
(som værdi), men en hel matrix skal overføres med
ByRef (som reference). Bemærk, at ByRef er standard.

Hvis du skal overføre en matrix med ByVal for at
forhindre, at ændringer i matrixens elementer forplantes
tilbage til det program, der foretager kaldet, skal du
overføre matrixargumentet i sine egne parenteser, eller
du kan anbringe det i en Variant og derefter overføre
Variant til parameteren ByVal, som vist nedenfor:

Dim MyVar As Variant
MyVar = OldArray()

Mht. til en funktion, der kan konvertere et array af bytes til
en string, kan se på nedenstående. Kode er dog _smidt_ ud
af ærmet, så det kan godt være, at der er fejl i den .

Public Function ArrayToString(varInput As Variant) As String
Dim MyInput() As Byte
MyInput = varInput
Dim output As String
Dim i As Integer

For i = LBound(MyInput) To UBound(MyInput)
output = output + Chr(MyInput(i))
Next i

ArrayToString = output
End Function

Det kan godt være at der findes en lettere måde, men ikke
en som jeg lige kan komme på .
--
Mvh.
Mikkel Bundgaard
RUC Datalogi
http://officehelp.gone.dk


Kommentar
Fra : Nyhedsbruger


Dato : 26-06-01 17:16

On Tue, 26 Jun 2001 07:37:53 GMT, "kikki" <kikki.news@kandu.dk> wrote:

>Jeg har en funktion som skal bruge et array af bytes, byval. Hvordan gør
>jeg dette?
Så vidt jeg husker, så kan man ikke overføre arrays byval... Trist.
(men prøv at skrive "byval" foran parameteren - hvis VB melder fejl,
så har jeg ret, ellers har du vundet).

>Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til
>en string, og tilbage igen?

En måde kunne være følgende, hvor tallene er adskilt af ";"

function ReturnString(ByteArray() as Byte) as string
dim tmpString as string   ' her bygger vi strengen op
dim antal as integer   ' antal elementer i array'et
dim i as integer      ' tæller

Antal = Ubound(ByteArray) ' antal elementer minus 1
tmpString = ""

For i = 0 to Antal
   ' næste tal i rækken
   tmpstring = tmpstring & cstr(ByteArray(i))
   ' hvis ikke sidste tal - så sæt komma efter
   If i < Antal then
      tmpString = tmpString & ","
   end if
next

' strengen returneres
ReturnString = tmpString

end function


Den anden vej kan løses ved at bruge splitfunktionen der er indbygget
i visual basic.

function ReturnByteArray(MyString as string) as Byte()
dim V as Variant ' splitfunktionen kræver en variant
dim ByteArray() as Byte ' midlertidigt array til vores bytes
dim Antal as Integer ' antal elementer i array'et
dim i as integer ' tæller

V = Split(MyString, ",") ' splitter op med komma som separator
Antal = Ubound(V) ' antal elementer (minus 1)
Redim ByteArray(Antal) ' størrelse

' Vi konverterer lige til bytes
For i = 0 to Antal
   ' Jeg kan ikke huske om konverteringsfunktionen
   ' til at konvertere en værdi til en byte hedder CByte,
   ' ellers må du slå op i VB hjælpen
   ByteArray(i) = CByte(V(i))
next

' Værdien returneres
ReturnByteArray = ByteArray

end function


Ovenstående er skrevet frit efter hukommelsen. Hvis der er nogen der
kan skue nogle fejl - så kom endelig med rettelser


Kommentar
Fra : Nyhedsbruger


Dato : 26-06-01 17:43

Brug funktioner join og split så behøver du ikke lave loop's og alt muligt
andet pjat som bliver foreslået.

Sony



"kikki" <kikki.news@kandu.dk> skrev i en meddelelse
news:sYWZ6.2849$lf5.476668@news010.worldonline.dk...
> Jeg har en funktion som skal bruge et array af bytes, byval. Hvordan gør
> jeg dette?
> Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til
> en string, og tilbage igen?
>
> Kikke
>
> --
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
>



Kommentar
Fra : Nyhedsbruger


Dato : 26-06-01 18:32

Det lader sig ikke gøre.... men du kan alltid overføre som variant

Option Explicit

Private Sub Form_Load()
Dim arrBytes(1 To 3) As Byte
Dim arrXXX() As Byte

arrBytes(1) = 1
arrBytes(2) = 2
arrBytes(3) = 3


arrXXX = recountArray(arrBytes)

End Sub

Private Function recountArray(ByVal myArray As Variant) As Variant
Dim bytTMP As Byte

bytTMP = myArray(1)
myArray(1) = myArray(3)
myArray(3) = bytTMP

recountArray = myArray

End Function

Konvertering til/fra string sker vha. Join/Split funktioner.

Hope this helps - BG

"kikki" <kikki.news@kandu.dk> skrev i en meddelelse
news:sYWZ6.2849$lf5.476668@news010.worldonline.dk...
> Jeg har en funktion som skal bruge et array af bytes, byval. Hvordan gør
> jeg dette?
> Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til
> en string, og tilbage igen?




Kommentar
Fra : Nyhedsbruger


Dato : 26-06-01 20:29

On Tue, 26 Jun 2001 07:37:53 GMT, "kikki" <kikki.news@kandu.dk> wrote:

>Og lige en anden ting, hvordan kan jeg konvertere et array af bytes til
>en string, og tilbage igen?
>

Fra array til string:

   myString = StrConv(myArray, vbUniCode)

og fra string til array:

   Private Declare Sub CopyMemoryStr Lib "kernel32" _
   Alias "RtlMoveMemory" (Destination As Any, _
   ByVal Source As String, ByVal Length As Long)

   
   Function String2Arr(ByVal myString As String) As Byte()
      Dim nLen As Integer
      nLen = Len(myString)
      ReDim String2Arr(nLen - 1)
      CopyMemoryStr String2Arr(0), myString, nLen
   End Function

Standard disclaimer:
Ovenstående er skrevet på en maskine uden adgang til VB, så det er
ikke aftestet.


Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste