百科狗-知识改变命运!
--

VB和VBA详细的区别?都用在什么地方?

百变鹏仔1年前 (2023-12-20)阅读数 7#综合百科
文章标签分区表分区

首先VBS不应该和VB、VBA放在一起比较,它是微软按照自己定义的ActiveX Scripting规范完全从头开始写成的脚本语言,虽然它的语法结构和VB非常相似,但VBS仅仅依靠自动化对象来扩充其功能(只有后期绑定),它不能用implements来实现接口,不可能在VBS里直接使用API,没有VarPtr这样能得到指针的函数,而VBS缺少的这些功能正是VB和VBA所特有的。当然,这不是说VBS不如VB或VBA,Windows已经为VBS提供了足够强大的功能,我们可以用VBS来做脚本COM组件,而且借自动化对象的能力VBS可以说能力无限,所以有病毒用VBS来写,对程序员来说VBS最重要的功能莫过于可以给自己的软件提供宏功能,就象VC中提供的VBS宏功能那样。注意,VBS是Free的,这和在Office中使用VBA来提供宏功能不同,要集成VBA需要价格不低的许可证费用,关于脚本语言可参见MSDN中Platform SDK\Tools and Languages\Scripting。

那么VB和VBA又有什么不同呢?好吧,眼见为实,开始我们的实验吧!

如果装了Office 2000以上版本,那么打开OLEVIEW,点击File下的View TypeLib查看位于E:\Program Files\Common Files\Microsoft Shared\VBA\VBA6下的VBE6.dll的类型库,再用同样的方法看看MSVBVM60.dll的类型库,你会发现它们的类型库基本上一模一样,除了VBE6多了一个VBEGlobal接口和实现这个接口的Global对象,这个Global对象我们也可以在VBA编程环境(比如用WORD的VB编辑器)中用对象浏览器看到。它有二个方法Load和UnLoad,还有一个UserForms属性,这是因为VBA6使用MS Form 2.0 Form设计器(FM20.dll)来设计和使用UserForm窗体(而在VB6中,我们可以使用多个设计器。比如通过使用MS Form 2.0 Form设计器,我们就能在VB中使用VBA所使用的UserForm用户窗体)。和VBA的Global对象类似,在VB中也有GLobal对象,从VB的对象浏览器中可以知道它在vb6.olb这个类型库中,这个类型库就是每个工程都必须引用的VB对象库,所有的VB内置对象都在这里。而VBA的UserForm中使用的对象都在FM20.dll中。

除了上述不同外,VB和VBA还有一个最大的不同,就是VBA不能生成EXE可执行文件,但可以猜想在IDE环境中VBA和VB都要把代码编译成p-code来执行,后面我将用实验来证明的确是这样,虽然在具体的实现上VB和VBA有很大的不同。

从上面的分析上可以看到VB和VBA还是有很大不同的,这种不同主要体现在编程环境和对象结构上,但在本质上它们之间却有着不可割舍的血源关系。如果刚才你仔细地观察了MSVBVM60.dll的类型库,你就会发现如下的片断:

// Generated .IDL file (by the OLE/COM Object Viewer)

[

dllname("VBA6.DLL"),

uuid(35BFBDA0-2BCC-1069-82D5-00DD010EDFAA),

helpcontext(0x000f6ec4)

]

module Strings {

[entry(0x60000000), helpcontext(0x000f665f)]

short _stdcall Asc([in] BSTR String);

[entry(0x60000001), helpcontext(0x000f6e9f)]

BSTR _stdcall _B_str_Chr([in] long CharCode);

……………

}

什么?在MSVBVM60.dll中的对象其方法却定义在VBA6.DLL中?!VB安装目录下不就有个VBA6.DLL吗?再用OLEVIEW看看它,哇噻,真是想不到它居然和MSVBVM60.DLL的一模一样。怎么回事?赶快再拿出DEPEND来看看VBA6.dll、MSVBVM60.dll和VBE6.dll这三个DLL的输出函数。哈,又有新发现,我们可以发现在三个DLL的输出函数中从编号512到717绝大部分都是一模一样的一些以rtc开头的函数,比如595的rtcMsgBox(rtc是什么?应该是Run Time Component? Control? Code?有谁知道吗?),这说明三个DLL都有着相同的运行时VBA函数。

我们再用DEPEND来观察一下VB6.EXE, 我们可以发现VB6.EXE引入了VBA6.DLL中一些它特有的以Eb和Tip开头的函数,从这些函数的名称上可以发现它们的功能都是IDE相关的,比如79的EbShowCode和82的TipDeleteModule。VB6.EXE恰恰没有引入任何rtc开头的函数(注意一)。我们再来看看MSVBVM60.DLL,随便找一个用了MsgBox函数的编译后的文件,用DEPEND来观察它,就会发现它引入MSVBVM60.DLL输出的595号rtcMsgBox函数(注意二)。并且引入MSVBVM60.DLL中很多以下划线开头的函数,比如__vbaVarAbs(注意三)。其实从这个三个"注意"中我们已经可以进行一些猜想,无论对错,你可以先想想。

如果你没有跟着我做实验,而仅仅是看这篇文章的话,我猜想你应该有点昏了。如果你自己动手做了这些实验,现在你应该充满了疑问而急侍看到结论。所以请一定要亲手试一试,学习研究问题的方法比看结论更重要。

VB和VBA详细的区别?都用在什么地方?

到这里至少我们可以得出结论:VB和VBA本就是同宗的姐妹,只不过姐姐VB的功夫要比妹妹VBA历害些。不过姐姐只会单打独斗是女强人;妹妹却只会傍大款。姐姐有生育能力,是真正的女人;妹妹却不会生崽,但深谱相夫之道,一番教导指挥之下可使她老公增色不少,而VBS呢,也是大户人家的女儿,不过没有VB和VBA姐妹优秀的血统,娇小玲珑干不得粗活只能指挥些自动听话的对象来干活,她乐于助人品德好不象VBA那样只认大款,VB、VBA、vbs三个女人我都喜欢。

MBR分区表:

在传统硬盘分区模式中,引导扇区是每个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。

一个扇区的硬盘主引导记录MBR由4个部分组成。

主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。 出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。 结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

GPT分区表:

GPT的分区信息是在分区中,而不象MBR一样在主引导扇区,为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区(Protective MBR)的MBR分区表(此分区并不必要),这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)