advapi32dll修复工具2021

经典话题:VB/VBA虚拟机深度解析
前言
确实,VB6IDE.DLL主要是VBIDE的资源库,它不包含自动化COM接口支持,这意味着它并不是我们主要分析的对象。因为VB/VBA的IDE是建立在COM接口之上的。
接下来,我们继续深入探讨。
三、VB/VBA虚拟机解析
(一)VB虚拟机
2、VB6.EXE用到的库之解析
(2)VBA6.DLL解析
排除了VB6IDE.DLL后,我们转向VBA6.DLL的解析。对于很多人来说,VB和VBA之间似乎存在某种隔阂。本文的目的就是要解析这两者之间的区别与联系。使用PEView打开VBA6.DLL,初步观察便知其中必有玄机。
一看Engine的名称和仅有几十K的大小,便可判断这是一个虚拟机。进一步查看其导出函数,我们会关注到函数与COM接口之间的对比。
Eb和Tip系列的函数与IDE相关,而rtc系列则是主要部分。查看其导入的DLL,包括ole32、oleAuto32、Gdi32、Use、Kernel32和AdvApi32等系统DLL,表明VBA.DLL并没有对非系统资源产生依赖,是一个相对独立的组件。这也意味着上述的导出函数都在VBA6.DLL内部实现。
对于那些看似陌生的导出函数,我们再来看看其背后的COM接口情况。你会发现,这些接口仿佛是VB语句的构成元素。每一个接口都是在VBA6.DLL中实现的。值得一提的是,此前有网友质疑VB缺乏文件系统支持,而这里我们可以明确地说,VBA6.DLL确实提供了这样的支持。
在之前的文章《VB/VBA中的函数:那些你用了很久的其实是这样的》中,我们初步介绍了函数在编码中的作用,并指出了标准函数与COM接口函数之间的微妙关系。在这里,我们将继续深入探讨函数的那些事。
为什么VB选择使用COM接口函数而不是导出函数呢?
使用导出函数几乎是C语言的常规做法,这种方式既直接又高效,同时也能让开发者更容易理解。这涉及到函数指针的概念,而指针的使用门槛较高。在计算机设计过程中,存在一个悖论:越接近人的操作方式往往效率越低,反之则越高。这是因为计算机硬件发展的技术路线所致。通用计算机大多基于冯诺依曼架构,但这是一种融合了冯诺依曼和哈弗架构的设计。如果从更抽象的角度来看计算机的发展,从最初的机械结构到现在的超大规模集成电路,其实计算机的本质一直未变。也就是说,计算机的发展是线性累积的。
C语言成为了许多开发语言的基座。在其精髓中,除了指针外,更重要的是C语言能够随时在计算机发展的进程中找到合适的支撑点。这是许多上层封装语言难以做到的。
回到VB/VBA的选择上来,使用COM接口函数实际上是为了降低使用门槛。Visual Studio的易用性与其IDE的设计理念是一致的,都是基于COM。COM的特点是制造复杂但使用简单,非常适合人机交互。这也是为什么COM始终是Windows系统的重要基石。关于人机交互的技术路线,Linux的CUI和Windows的GUI代表了不同的阵营。但无需争论哪个更好,因为这是由计算机硬件发展决定的。Linux的内核架构决定了其难以做出像Windows那样低门槛的技术产品。而Windows则通过硬件性能的提升缓冲了其在纯性能上的不足。这也使得Windows在人事处理方面表现出色。至于更多的关于VB/VBA虚拟机的内容以及后续讨论,我们会在后续的更新中继续分享。欢迎大家持续关注并留言讨论。
