Gå til innhold

CopyMemory, program krash


Anbefalte innlegg

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 av dga01
Lenke til kommentar
Videoannonse
Annonse

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...