VB内存分配与流读写代码
来源:优易学  2011-12-10 20:09:56   【优易学:中国教育考试门户网】   资料下载   IT书店
  Option Explicit
  Private Declare Function VirtualAlloc()Function VirtualAlloc Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
  Private Declare Function VirtualFree()Function VirtualFree Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
  Private Declare Function VirtualLock()Function VirtualLock Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long) As Long
  Private Declare Function VirtualUnlock()Function VirtualUnlock Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long) As Long
  Private Declare Function IsBadReadPtr()Function IsBadReadPtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
  Private Declare Function IsBadWritePtr()Function IsBadWritePtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
  Private Declare Function IsBadStringPtr()Function IsBadStringPtr Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long
  Private Declare Function lstrcpy()Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpStringDest As String, ByVal lpStringSrc As Long) As Long
  Private Declare Function lstrlen()Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
  Private Declare Sub CopyMemory()Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDest As Long, ByVal pSrc As Long, ByVal ByteLen As Long)
  Private Const MEM_DECOMMIT = &H4000
  Private Const MEM_RELEASE = &H8000
  Private Const MEM_COMMIT = &H1000
  Private Const PAGE_EXECUTE_READWRITE = &H40
  Private m_Handle As Long
  Public Property Get()Property Get Handle() As Long
  Handle = m_Handle
  End Property
  ''分配内存
  Public Sub Allocate()Sub Allocate(ByVal lCount As Long)
  Call Release
  m_Handle = VirtualAlloc(ByVal 0&, lCount, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
  VirtualLock m_Handle, lCount
  End Sub
  ''读取
  Public Sub ReadFromPointer()Sub ReadFromPointer(ByVal hWritePointer As Long, ByVal lLength As Long)
  If IsBadWritePtr(hWritePointer, lLength) = 0 And IsBadReadPtr(Handle, lLength) = 0 Then
  CopyMemory hWritePointer, Handle, lLength
  End If
  End Sub
  ''写入
  Public Sub WriteToPointer()Sub WriteToPointer(ByVal hReadPointer As Long, ByVal lLength As Long)
  If IsBadReadPtr(hReadPointer, lLength) = 0 And IsBadWritePtr(Handle, lLength) = 0 Then
  CopyMemory Handle, hReadPointer, lLength
  End If
  End Sub
  ''释放内存
  Public Sub Release()Sub Release()
  Dim lLength As Long
  If m_Handle <> 0 Then
  VirtualUnlock m_Handle, lLength
  VirtualFree m_Handle, lLength, MEM_DECOMMIT
  VirtualFree m_Handle, 0, MEM_RELEASE
  m_Handle = 0
  End If
  End Sub
  Private Sub Class_Terminate()Sub Class_Terminate()
  Call Release
  End Sub

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训