vb操作内存

    技术2022-05-11  99

    有人说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 = sReturnend function

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

     

    最新回复(0)