中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual Basic > 数字数据
VB也能访问内存
作者:samuelxp 时间:2001-11-01 10:42 出处:互联网 责编:chinaitpower
              摘要:VB也能访问内存

    有人说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

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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有