找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4271|回复: 2

VB实现C库函数中的几个内存操作函数

[复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-12 22:16:58 | 显示全部楼层 |阅读模式
mdl_memory.bas:

  1. Option Explicit

  2. Private Declare Function VirtualAlloc Lib "kernel32.dll" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
  3. Private Declare Function VirtualFree Lib "kernel32.dll" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
  4. Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

  5. Public Function malloc(ByVal dwLen As Long) As Long
  6.     malloc = VirtualAlloc(0, dwLen, &H1000, &H40)
  7. End Function

  8. Public Sub free(ByVal PVOID As Long)
  9.     VirtualFree PVOID, 1, &H1000
  10. End Sub

  11. Public Sub memcpy(ByVal pDst As Long, ByVal pSrc As Long, ByVal dwLen As Long)
  12.     RtlMoveMemory pDst, pSrc, dwLen
  13. End Sub

  14. Public Sub memset(ByVal pDst As Long, ByVal bFill As Byte, ByVal dwLen As Long)
  15.     Dim i As Long
  16.     For i = 0 To dwLen - 1
  17.         RtlMoveMemory pDst + i, VarPtr(bFill), 1
  18.     Next
  19. End Sub

复制代码

评分

参与人数 1 +20 收起 理由
阿杰 + 20 仿佛回到C时代了

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-12-12 22:18:09 | 显示全部楼层
测试:

  1. Option Explicit

  2. 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

  3. Private Sub Command1_Click()
  4.     Dim maddr As Long
  5.     Dim cn_mm As Long
  6.     cn_mm = &HC3C3C3C3
  7.     maddr = malloc(5)
  8.     memcpy maddr, VarPtr(cn_mm), 4
  9.     memset maddr + 4, 0, 1
  10.     MessageBoxA 0, maddr, maddr, 0
  11.     free maddr
  12. End Sub
复制代码
会弹出个对话框,标题和内容都是“妹妹”。

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-7-27 09:49:35 | 显示全部楼层
好好 非常不错哦
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表