VB也能访问内存

原创 2002年03月18日 09:12:00

    有人说vb不能操作内存,效率低下,我不是太赞同.vb跟c比当然效率比较低下了,但是如果使用得当还是有不少的效率提高的.

     在开发windows上的应用时(注意啊,不是驱动),理论上来说,用vb可以做任何软件.因为vb本身没有的,可以使用api,而win32 api时可以实现windows上的任何应用功能的.当然这和使用者的功力有很大的关系,如果c/c++的功力很好,你甚至可以用vb实现内存拷贝的功能,因为long类型可以做指针.

     最近在做界面, 对vb有点研究, 给个例子吧.比如10进制转换2进制.

     用vb的一般用除法这么做:
public function o2b(byval long nValue) as string
     dim nValueCopy as long
     dim nTmp as byte '商
    dim sReturn as string '返回值
    nValueCopy = nValue

     '也有用nValue - 2^N 方式的,这里就不多说了

    do while nValueCopy > 0
          nTmp = nValueCopy / 2          
          sReturn = cstr( nValueCopy - nTmp / 2 ) & sReturn  '反向累计
        nValueCopy = nTmp
     loop
 
     o2b = sReturn


end function

     而用c比较熟的人一般按位去做:
public function o2b(byref long nValue) as string
     dim nBit( 0 to 7 ) as byte       ' 最小的单位是byte了,放掩码
    dim nByte( 1 to 4 ) as byte     ' 分解nValue到字节的
    dim nTmp as byte
     dim pValue as long                ' 指针
     dim sReturn as string             ' 返回值
    dim i as byte, j as byte

     nBit(0) = 1            '00000001 
     nBit(1) = 2            '00000010
     nBit(2) = 4            '00000100
     nBit(3) = 8            '00001000
     nBit(4) = 16           '00010000
     nBit(5) = 32           '00100000
     nBit(6) = 64           '01000000
     nBit(7) = 128         '10000000

     ' 取 nValue 的地址
     pValue = VarPtr( nValue )

     ' win32 api, 将nValue的4个字节分别复制到nByte中,byref 就相当于指针
    CopyMemory( nByte(1), byref pValue, 4 )

     for i = 4 to 1      '低字节在前
       for j = 7 to 0    '高位开始
         ' 方法一, 减法
         nTmp = 0
              if nByte(i) > nBit(j) then
                  nByte = nByte(i) - nBit(j)
                  nTmp = 1           ' 这一位二进制是1
              end if
              sReturn = sReturn & cstr(nTmp)

              ' 方法二,按位与 效率更高
        nTmp = 1
              if ( not ( nByte(i) imp nBit(j) ) ) = nBit(j) then
              ' 我没有找到vb按位与的函数,只有按位"同与"(不记得是不是)的imp
                   nTmp = 0
              end if
              sReturn = sReturn & cstr(nTmp)

     next j, i

     o2b = sReturn

end function

在网吧里,没有环境,随手写写,有错误请见谅,主要是思路.

关于用VB读写内存的方法

导读:   不象C语音,VB不会自动包括普通的API函数的声明,因此我们必须把他们加入我们的项目文件。在几乎所有的修改器中会使用到6个主要的函数,讨论如下:   1. FindWindow(Class...
  • adm1n1
  • adm1n1
  • 2008年01月31日 12:49
  • 1839

随机访问和顺序访问

随机访问是说你可以随意访问该数据结构中的任意一个节点,假设该数据结构有10个节点,你可以随意访问第1个到第10个节点。 对于列表而言,如果其存在10个节点,如果你要访问第5个节点,你只能从列表的头或...
  • lvyuan30276
  • lvyuan30276
  • 2017年12月28日 19:25
  • 82

用VB进行GDI+绘图

正巧处理图形,突然发现一个很强的库GDI+,遂恶补一番! VERSION 5.00Begin VB.Form frmMain    BackColor       =   &H8000000A&   ...
  • dragoonnet
  • dragoonnet
  • 2011年04月08日 19:24
  • 3741

给初学者:用VB写外挂 ———— 从窗口到PID,进而读写内存

我们首先从HWND、PID入手,这是我们经常要用到的两种“标志符”。 HWND:窗口句柄,当我们要向游戏窗口发送一个按键或输入一段文本时,它将非常有用。PID:进程标志符,当我们要操作内存、截获和修改...
  • zcsor
  • zcsor
  • 2006年08月27日 22:07
  • 53127

发现一个很奇怪的现象--关于VB程序的内存占用

我们先看看下面这个简单的程序:一个form,没有任何控件Private Sub Form_Load()Me.WindowState = 1Me.HideEnd Sub我们把这个程序稍作修改,加入一个t...
  • erho
  • erho
  • 2005年04月23日 00:56
  • 1287

ACTIVEX也能访问数据库

今天第一次看到,觉得很惊讶,感觉自己见识太少了: Client.Html页面源码如下: html> head> title>get data from database at clienttitle>...
  • yvan2008
  • yvan2008
  • 2008年12月26日 09:41
  • 389

VB的内存释放(鄙视那些说内存泄露的人,适用VB6,.NET)

很多人都发现过,VB使用webbrowser等网络控件或其他一些大型控件时,占用的内存资源会不停的上涨,直到机器支持不了,运行崩溃。很多自以为是的高手要么说VB内存管理的问题,要么IE内核存在泄露。其...
  • icbyboy
  • icbyboy
  • 2013年01月19日 11:49
  • 4793

VB 显示内存中的图片

'假设Form 上已经存在Picture1的控件,并已经设置好图片Dim PBag As New PropertyBagDim B() As BytePBag.WriteProperty "Pictu...
  • lbuskeep
  • lbuskeep
  • 2011年02月15日 17:19
  • 3734

关于oracle 跨用户访问表

oracle 中 用户A 用户B 用户A 有 table1,package1  如果 b用户 想访问 table1  . 首先 ,要通过有权限的用户给b用户做授权。 GRANT all O...
  • cwywx
  • cwywx
  • 2016年01月14日 11:13
  • 307

vb 内存释放

用New创建的全局对象,在UnLoad函数里一定要用 Set 对象 = Nothing。 用GetWindowDC 获得的句柄需要用 ReleaseDC 释放! 一直使用GetWindowDC而不释...
  • yanzhibo
  • yanzhibo
  • 2013年03月25日 14:09
  • 1544
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB也能访问内存
举报原因:
原因补充:

(最多只允许输入30个字)