自已做的一个API内存分配的类
昨天虽然用VB的byte数组去仿造的一个分配的内存,感觉不爽,今天自已做了一个调用api来分配内存的类。
'
Option Explicit
Private Declare Function LocalAlloc Lib "kernel32.dll" ( _
Private Declare Function LocalFree Lib "kernel32.dll" ( _
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias
"RtlMoveMemory" ( _
Private Declare Sub CopyMemoryPtrToStr Lib "kernel32.dll" Alias
"RtlMoveMemory" ( _
Private Declare Function lstrlen Lib "kernel32.dll" Alias
"lstrlenA" ( _
Private Declare Function lstrlenPtr Lib "kernel32.dll" Alias
"lstrlenA" ( _
Private Declare Function lstrcpy Lib "kernel32.dll" Alias
"lstrcpyA" ( _
Private Declare Function lstrcpyPtrToStr Lib "kernel32.dll" Alias
"lstrcpyA" ( _
Private Const LMEM_FIXED As Long = &H0
Private Const LMEM_ZEROINIT As Long = &H40
Private lPtr As Long
Private bExitFree As Boolean
Public Property Get GetPtr() As Long
End Property
Public Function Alloc(nCount As Long, SizeOf As Long, Optional
bFreeOld As Boolean = True) As Boolean
End Function
Public Function FreeOtherMem(ptr As Long) As Boolean
End Function
Public Property Get ExitFree() As Boolean
End Property
Public Property Let ExitFree(ByVal vNewValue As Boolean)
End Property
Private Sub Class_Initialize()
End Sub
Private Sub Class_Terminate()
End Sub
Public Function ToVBStr() As String
End Function
'------------------------
'另做了一个打印内存的内容的类
'clsMemPrint
Option Explicit
Private Declare Function lstrlenPtr Lib "kernel32.dll" Alias
"lstrlenA" ( _
Private Declare Sub CopyMemorySrcPtr Lib "kernel32.dll" Alias
"RtlMoveMemory" ( _
Private Declare Sub CopyMemoryPtrToStr Lib "kernel32.dll" Alias
"RtlMoveMemory" ( _
Public Enum ePrintOption
End Enum
Public Sub MemPrint(lPtr As Long, iLen As Long, Optional op As
ePrintOption = ePO_Char)
End Sub
Public Function ToVBStr(lPtr As Long) As String
End Function
'------------------------
'另外还做了LMEM_MOVEABLE 类型的内存分配,就不贴代码了。它们的区别我的理解是,LMEM_MOVEABLE 是可以重分配的大小,就是不重分配,系统也可能移动这个分配的内存,只要它没被Lock。系统只记了一个hMem句柄,要获得真正的内存地址,还要用
Private Declare Function LocalLock Lib "kernel32.dll" ( _
如果用释放时,增长方式重分配时,还要用
Private Declare Function LocalUnlock Lib "kernel32.dll" (
_
浙公网安备 33010602011771号