VB实现C库函数中的几个内存操作函数
mdl_memory.bas:Option Explicit
Private Declare Function VirtualAlloc Lib "kernel32.dll" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFree Lib "kernel32.dll" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Public Function malloc(ByVal dwLen As Long) As Long
malloc = VirtualAlloc(0, dwLen, &H1000, &H40)
End Function
Public Sub free(ByVal PVOID As Long)
VirtualFree PVOID, 1, &H1000
End Sub
Public Sub memcpy(ByVal pDst As Long, ByVal pSrc As Long, ByVal dwLen As Long)
RtlMoveMemory pDst, pSrc, dwLen
End Sub
Public Sub memset(ByVal pDst As Long, ByVal bFill As Byte, ByVal dwLen As Long)
Dim i As Long
For i = 0 To dwLen - 1
RtlMoveMemory pDst + i, VarPtr(bFill), 1
Next
End Sub
测试:
Option Explicit
Private Declare Function MessageBoxA Lib "user32.dll" (ByVal hwnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal wType As Long) As Long
Private Sub Command1_Click()
Dim maddr As Long
Dim cn_mm As Long
cn_mm = &HC3C3C3C3
maddr = malloc(5)
memcpy maddr, VarPtr(cn_mm), 4
memset maddr + 4, 0, 1
MessageBoxA 0, maddr, maddr, 0
free maddr
End Sub
会弹出个对话框,标题和内容都是“妹妹”。 好好 非常不错哦
页:
[1]