有人说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
在网吧里,没有环境,随手写写,有错误请见谅,主要是思路.