<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      VB不妨訪問內存

      [摘要]有人說vb不能操作內存,效率低下,我不是太贊同.vb跟c比當然效率比較低下了,但是如果使用得當還是有不少的效率提高的. 在開發windows上的應用時(注意啊,不是驅動),理論上來說,用vb可以做任何軟件.因為vb本身沒有的,可以使用api,而win32 api時可以實現windows上的...
          有人說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

      在網吧里,沒有環境,隨手寫寫,有錯誤請見諒,主要是思路.


      日韩精品一区二区三区高清