解决Access 或VBA 32位控件在64位windows 系统中注册OCX失败。
开启cmd.exe执行regsvr32 test.ocx时传回错误讯息:
无法加载模块 c:\windows\system32\test.ocx"。 请确定二进制文件储存于指定的路径,或进行侦测以检查二进制文件或相依 .DLL 档是否发生问题。找不到指定的模块。
在x64平台注册32位组件(OCX, DLL)应使用c:\windows\sysWOW64\regsvr32.exe,而非c:\windows\system32\regsvr32.exe! (发现有趣的是: system"32"下的regsvr32.exe是64位版,sysWOW"64"下的regsvr32.exe才是32位版。XD)
将test.ocx复制到c:\windows\sysWOW64,并使用同目录下的regsvr32.exe执行注册。
但是注册后会出现第二个问题:0x80040200
"test.ocx" was loaded but the call to DllRegisterServer failed with error code 0x80040200
模块test.ocx已加载, 但是呼叫 DllRegisterServer 失败, 错误码为 0x80040200
原因: 同事因不熟悉UAC的眉角,在启动cmd.exe时未Run As Administrator提升为管理者权限,导致0x80040200权限不足错误(印象中,权限不足代码多为0x80004005,本例不然)。重新升为管理者权限执行cmd.exe,注册成功!