VB6即是Visual Basic 6.0,是引入 .NET Framework 之前的终极版本,该软件是 Microsoft Visual Studio 6.0 的重要组成部分,它出现在1999年的《黑客帝国》电影中是VB6的巅峰时刻。
在 .NET Framework 出现后已逐渐被 C# 和 Visual Basic.net 所替代,目前甚至在 GitHub 中被识别成VBA,VB程序员当然知道VB6和VBA不同的,举一个简单的例子,VB6是可以编译成EXE文件的,VBA是运行在Excel文件里面的,只是它们的语法比较类似,代码相互比较容易移植,类似的还有ASP和VBS。
那么VB6这种已经式微的编程语言还有没有用呢?
如果你想用VB6来开发WEB应用程序,即编译成DLL运行在ASP,那基本没有什么用了,因为现在Windows 2008之后的IIS上要部署这样的环境是非常困难的。
如果你想用VB6来开发界面时尚的Windows 桌面程序,那也没什么用,因为VB6开发出来的UI比较古老。
但是如果你对 Windows 桌面程序UI没有要求,却发现VB6有着意想不到的生命力。
因为只要 Windows 在 %windir%\system(32位)或%windir%\SysWOW64(64位)目录下有msvbvm60.dll和stdole2.tlb这两个文件,VB6编译的EXE就可以直接运行,幸运的是即使在最新的Windows 2019版本或Windows 10版本中,无论是32位还是64位版本,都已经预装了这两个文件,这显然比使用 .NET Framework 编译出来的EXE文件在不同的 Windows 版本中有更强的适应性,因为不同 Windows 版本预装的 .NET Framework 是不同的,有些甚至还要另外下载安装包才能安装。
看起来似乎用VB6编译的EXE文件还是非常美妙的,但要在不同版本的 Windows 上很好的运行,还需要满足以下条件:
采用 Compile to P-Code 的编译方式,这样编译出来的EXE文件更小而且兼容性更好,除了Win98/95/Me和WinNT没有测试过,像服务器版本 Windows 2000/2003/2008/2012/2016/2019和桌面版本 Windows XP/Vista/7/8/8.1/10上都测试过可以直接运行的,不需要做额外的准备。

不要直接引用 ActiveX DLL,因为这些 ActiveX DLL 的在不同版本Windows中的二进制版本不一定能完全兼容,如果不兼容则不能使用,解决办法是通过 CreateObject 的方式来使用,这样兼容性将大大提高,不过使用 CreateObject 会导致在GUI的编程过程中无法联想列出属性和方法,使用不便,解决办法是创建一个 "Object 化" 的类,将 ActiveX DLL 的接口封装进去,这样就可以部分实现直接引用 ActiveX DLL 的编程体验。

具体的使用案例可以见 https://gitee.com/SeowPhong/PigObjFs 。
以下列出几种 Windows 自带的 ActiveX DLL,不需要自已使用 regsvr32 去注册的,可以直接 "无组件化" 的方式使用。
64位 Windows 为例
Microsoft ActiveX Data Objects 6.1 Library
Microsoft Scripting Runtime
Microsoft XML, v6.0
使用Windows API函数,VB6绝大部分是能够使用的,只有极少数需要VC才能使用,类似的写法如下:
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
不要使用安装包制作软件,因为制作出来的安装包EXE文件就可能无法保证在不同版本的 Windows 上运行,同时还有32位与64位之分。
OCX文件的使用,程序用到的OCX文件不要复制到 %windir%\system 或 windir%\SysWOW64 这样的公共目录下,以免和其他软件冲突,只需要和VB6编译出来的EXE文件存放在同一个目录就可以运行了。
完成以上准备后,将VB6编译出来的EXE文件、OCX文件存放在同一个目录,压缩成ZIP文件,就可以发布使用了,在不同 Windows 版本上,只需要解压后直接运行EXE就可以了。