打开一个老的管理软件,弹出「Component 'TABCTL32.OCX' or one of its dependencies not correctly registered」。这类 ocx 报错基本都出在早期 VB6 开发的程序上,现在还在用的行业软件不少,比如一些老的工控、财务、医疗系统。
它到底是什么
tabctl32.ocx 是 Microsoft Windows Common Controls-2 6.0 里的组件,提供选项卡控件,文件通常只有一百多 KB。它是 ActiveX 控件,需要注册到系统才能在程序里被创建,注册信息写在注册表里。复制文件过去而不注册,程序照样报错。
正确修复顺序
先看程序目录。很多软件安装时会自带一份 ocx 放在自己目录下,它优先读本地那份。如果本地有文件却报错,通常是没有随程序一起注册。
# 以管理员身份打开命令提示符,进入程序目录
regsvr32 tabctl32.ocx
# 64 位系统跑 32 位程序,用 32 位版本的注册工具
C:\Windows\SysWOW64\regsvr32.exe tabctl32.ocx执行后应该弹出「已成功」的提示。如果提示模块加载失败,一般有三种原因:不是管理员权限、文件损坏、缺少依赖。缺少依赖时可以试试把 mscomctl.ocx 一并注册。
64 位系统上的位数问题
这点最容易出错。tabctl32.ocx 是 32 位控件,必须用 SysWOW64 里的 regsvr32 注册,并且文件放在 SysWOW64 或程序目录。如果你用 System32 下的 regsvr32 去注册,会提示不兼容。
- 32 位程序:用 SysWOW64\regsvr32,文件在 SysWOW64 或程序目录。
- 64 位程序:这类组件几乎不存在 64 位版本,老程序基本都是 32 位。
文件从哪来
别去那些弹窗一堆的 dll 下载站。这些站点提供的文件常被改过,还可能捆绑广告程序。可靠来源有两个:一是软件官方安装包,重新安装一次最省事;二是安装对应版本的 Visual Basic 6.0 运行库支持包,微软官方还在提供。
重新安装前记得把原来的目录改名备份,避免卸载程序把用户数据一起删掉。
注册成功还是报错
如果注册提示成功,程序仍报同样的错,可能性有:程序自己目录下有一份损坏的同名文件,优先被加载了;杀毒软件拦截了控件加载;系统位数与程序位数不匹配。可以先在程序目录里找有没有 tabctl32.ocx,有的话把它替换成正确版本再注册。
实在搞不定,直接用虚拟机装一个老系统跑这类软件,比在 Win10、Win11 上折腾一整天要快。