Tesla.Angela 发表于 2010-12-12 22:16:58

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


Tesla.Angela 发表于 2010-12-12 22:18:09

测试:
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
会弹出个对话框,标题和内容都是“妹妹”。

upring 发表于 2015-7-27 09:49:35

好好 非常不错哦
页: [1]
查看完整版本: VB实现C库函数中的几个内存操作函数