-
vb教程之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
在网吧里,没有环境,随手写写,有错误请见谅,主要是思路.
在开发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
在网吧里,没有环境,随手写写,有错误请见谅,主要是思路.
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比