d0ppler Skrevet 24. august 2004 Del Skrevet 24. august 2004 (endret) Hvorfor i alle dager tryner VB når jeg kaller encrypt funskjonen? Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Public Function encrypt(Content As String, key As String) As String Dim pwd() As Integer ReDim pwd(Len(key)) Dim i, j As Long Dim ret As String Dim bit As Integer ret = Space$(Len(Content)) For i = 0 To UBound(pwd) - 1 Step 1 pwd(i) = Asc(Mid(key, i + 1, 1)) Next i For i = 0 To Len(Content) Step 1 bit = Asc(Mid(Content, i + 1, 1)) - pwd(j) If bit < 0 Then bit = bit + 255 CopyMemory ByVal StrPtr(ret) + i, ByVal StrPtr(Chr(bit)), 1 j = j + 1 If j >= UBound(pwd) Then j = 0 Next i encrypt = ret End Function Klarer ikke å se hva jeg gjør galt her, mulig jeg har sett meg blind på noe.. EDIT : Det er linja hvor CopyMemory blir kalt hvor ting krasjer Endret 24. august 2004 av dga01 Lenke til kommentar
aadnk Skrevet 24. august 2004 Del Skrevet 24. august 2004 Hva med å heller bruke den innebyde funksjonen og operatøren Mid istedenfor? Da unngår du slike problemer, og koden blir lettere og mer oversiktlig. Følgende er funksjonen med Mid: Public Function encrypt(Content As String, key As String) As String Dim pwd() As Integer ReDim pwd(Len(key)) Dim i, j As Long Dim ret As String Dim bit As Integer ret = Space$(Len(Content)) For i = 0 To UBound(pwd) - 1 Step 1 pwd(i) = Asc(Mid(key, i + 1, 1)) Next i For i = 1 To Len(Content) Step 1 bit = Asc(Mid(Content, i, 1)) - pwd(j) If bit < 0 Then bit = bit + 255 Mid(ret, i, 1) = Chr(bit) j = j + 1 If j >= UBound(pwd) Then j = 0 Next i encrypt = ret End Function Lenke til kommentar
GeirGrusom Skrevet 24. august 2004 Del Skrevet 24. august 2004 Bytt ut CopyMemory med dette: Mid(ret, i, 1) = Chr(bit) Så er det nok på plass. Lenke til kommentar
d0ppler Skrevet 25. august 2004 Forfatter Del Skrevet 25. august 2004 Ok, jeg er fullstendig klar over Mid-funksjonen, og burde kanskje sagt dette i min første post. Problemet er at Mid funksjonen er så vanvittig mye tregere enn CopyMemory. Lenke til kommentar
aadnk Skrevet 25. august 2004 Del Skrevet 25. august 2004 Ok, jeg er fullstendig klar over Mid-funksjonen, og burde kanskje sagt dette i min første post. Problemet er at Mid funksjonen er så vanvittig mye tregere enn CopyMemory. Dette stemmer så absolutt ikke. Se bare på følgende test: - Starting time test, part 1... Using API-call CopyMemory Copying 8196 bytes of data into string. Time used: 1,29 ms - Starting time test, part 2... Using MID function in Visual Basic Copying 8196 bytes of data into string. Time used: 0,10 ms Send meg en PM hvis du har lyst på koden som testet det. Orker ikke å legge det ut her. Lenke til kommentar
d0ppler Skrevet 1. september 2004 Forfatter Del Skrevet 1. september 2004 oi , beklager!! Skal bruke mid() fra nå av, tryggere OG raskere! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå