1.标准DLL一度成为VB/VBA圈子里的一道坎,让很多VB/VBA人在流口水的情况下抬不起头来。什么是标准DLL?VB/VBA做的DLL是不是非标准产品?
2.DLL只是在本地存储代码的方法之一。和把简历以某种形式保存在Word文档里没什么区别。为什么到了VB/VBA就有标准和非标准之分了?DLL的存储格式必须遵循PE格式,不管是用C/C++写的,还是用Python打包的,但必须是一样的!还是LoadLibrary会鸟你?

如何在VB/VBA的64位Win上继续聪明?在书中,作者深入分析了DLL在这个过程中的身份和地位。简单来说,DLL就是贯彻团队精神,是COM思维的实现之一。在抽象上,DLL是照原样命名的,即动态链接库和存储资源的磁盘文件。当然,除了字符串、图标等附件,最重要的还是代码。
3.VB二进制编译后,不都是汇编指令吗?VB用的CPU指令和C/C++用的不一样是真的吗?笔者对“标准DLL”这个概念感到不解,所以查了一下,发现争议点在于派生函数。更有奇人敲出VB/VBA编译DLL中经典的四个导出函数,借此标榜DLL血统的纯正。其实没必要。今天给大家分析一下。为什么?
4.故事还得从“代码重用”说起。说到这,很多圈子都受不了。没错,不要激动。OO是为代码重用、大规模项目等一系列特性量身定制的。很多旧代码,大概都有一套他们学了一辈子的代码树,抽象出他们对世界的认知。轻点鼠标,犹如出兵,可以全天投射到项目中空,展现出海豹突击队队员般的强大战斗力。
尤其是继承的特性,让广大OO作者欲罢不能,各种对象都有把握。这就是代码复用的魅力。由此衍生出无数种现代开发组织和管理方式。甚至可以跨平台联动。代码复用的核心是消除重复,节省人力。跨平台不也是这样吗?如果没有代码复用场景,那就跨个屁平台!有了整个虚拟机时间,手动打字代码就已经打完了。所以,OO和跨平台是两个好兄弟。有人反对吗?

5.但是,无论是OO还是跨平台,都强调源代码的重用。除此之外,还有一种代码复用,就是二进制机器码的复用。想想现代的通用操作系统,其中数千万行代码被频繁使用。如果没有二进制级别的代码重用,会是什么样子?
因此,机器级别的代码重用也是极其重要的。如果要追溯历史,它其实是伴随着硬件和系统一起发展的。早期的纸带是卷一卷来执行一个功能,代码在不同的卷纸上,无法重复使用,因为不可能同时塞两卷。直到后面的微程序长时间驻留内存,所有接口注入内存,代码重用才成为可能。
谁记得BASIC的GOTO?与今天的GoTo不同,它只在一个功能代码块中工作。这是一个坚强的角色,他带着一个号码出发,在世界各地奔忙,并考虑去哪里。实际上,由于指针的核心含义是相同的,所以内存中的所有代码都是兄弟。但是随着系统的发展,系统控制了硬件资源,产生了一系列的层级系统。有了权限系统,只有特定权限标记的内存才能执行里面的代码。
为了更好的解决二进制代码复用的问题,必须有一个标准体系。COM就是这些规范中的一个,其核心无非就是二进制代码的复用。因此,一切都被接口的COM不仅可以跨语言重用代码,还可以跨机器重用代码。在这里大家伙们可以脑补一下,或者查一下COM和LoadLibrary的机制,它们和现代操作系统有什么不可言说的关系?

6.很多人对COM不屑一顾,就像看VB/VBA一样。“陈旧过时”成了口头禅,甚至有人说Win10之后就不再支持COM了。不知道哪个COM已经成为跨进程跨机器的超级GOTO了。关键是还是很安全的。很多时候,你不知道它在哪里。一个函数调用宝宝名字,它就像你的黄一样出现在你面前。
作为COM之王,BASIC的传承者,VB/VBA怎么能忘本呢?更何况LoadLibrary没有区别对待dll的眼光。如果是的话,它也在检查类型版本等等。既然人人都可以被库加载,为什么还会被歧视?
所谓的标准DLL,本来是想以Declare的方式使用代码,想用函数指针直接GOTO。在追求结构的今天,古老的GOTO早已被树枝、回环等代替。,而COM组件在这次替换中也算是高级货。尽管如此,VB/VBA也保留了原来的指针操作,COM也保留了指针操作的路径。
在VB/VBA中,COM有一个神奇的功能。总之,难道不好吃吗?补充智能提示和语法元素?你不得不玩低效的声明,你不得不玩复杂的指针。单纯就不好了!
想玩就关注BtOfficer。更刺激的事情还在继续,认真的技巧,轻松的喋喋不休。期待你的加入!


