2014-06-20 43 views
0

나는 다음과 같은 코드는 "보호 된 메모리를 읽거나 쓰려고 시도 이것은 종종 다른 메모리가 손상되었음을 나타냅니다."

이 오류가 발생합니다 사용하고 vb.net에서 복어 :

읽기를 시도하거나 쓰기 방지 된 메모리. 이것은 종종 다른 메모리가 손상되었다는 표시입니다. 보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.

Public Function PadBytes(abData() As Byte) As Object 

    Dim nLen As Long 
    Dim nPad As Integer 
    Dim abPadded() As Byte 
    Dim i As Long 

    'Set up error handler for empty array 
    On Error GoTo ArrayIsEmpty 

    nLen = UBound(abData) - LBound(abData) + 1 
    nPad = ((nLen \ 8) + 1) * 8 - nLen 

    ReDim Preserve abPadded(nLen + nPad - 1) ' Pad with # of pads (1-8) 
    If nLen > 0 Then 
     CopyMemory(abPadded(0), abData(0), nLen) 
    End If 

    For i = nLen To nLen + nPad - 1 
     abPadded(i) = CByte(nPad) 
    Next 

ArrayIsEmpty: 
    PadBytes = abPadded 

End Function 

    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Byte, Source As Byte, ByVal Length As Long) 

올바른 방법을 보여주십시오.

+0

코드가 VB6-ish인데 특히 CopyMemory 선언이 좋습니다. [pinvoke : CopyMemory] (http://www.pinvoke.net/default.aspx/urlmon/CopyMemory.html) – LarsTech

+0

예, VB6에서 사용했습니다. VB에서 사용하려고했던 것보다 – user3760033

+0

수 없습니다. . longs, 등등 대신 정수를 사용하여 다시 써야합니다. – LarsTech

답변

0

난 당신이 내가 어떤 더 그래서 당신은 당신 자신을 위해 그것을 시도해야 할 것 VB6이없는 다음

CopyMemory(abPadded(0), byval abData(0), nLen) 

같이 복사를 할 필요가 있다고 생각. 손가락이 그것을 교차 시켰습니다.

+0

해당 구문을 시도 할 때 작동하지 않습니다. 다른 제안 사항이 있습니까? – user3760033