win10注册ocx控件的步骤(包含错误处理方法0x80040200)

最近在测试一个加载ocx控件的C++程序,运行前要先注册ocx控件。

1.用运行命令提示符或者PowerShell。

2.利用命令进入到ocx文件所在的目录下输入注册命令

注册命令:regsvr32 XXXX.ocx        
反注册命令:regsvr32 /u XXXX.ocx

或者直接输入注册命令,再输入ocx文件的绝对路径,回车,一般就可以注册成功的。

 

但是这次在测试机上弹出一个错误提示:

模块“XXXX.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80040200。

查找资料有得到以下原因和方法:

1. 缺少文件。为了尽量减少这种情况的发生,在编译时,两个地方需要修改:

A. C/C++ -->  代码生成 --> 运行库,由于发布的通常是release版本,所以debug版本的可以不管,对release版本,修改为“多线程”,而不要选择“多线程 DLL”

B. 如果有使用MFC,则在 常规 --> MFC的使用荐中,选择“在静态库中使用MFC”,而不要选择“在共享DLL中使用MFC”,如果是不使用MFC,则选择“使用标准windows库”

此种情况发生的概率最大,通常来说,通过以上两个选择的修改,对windows库的依赖上基本可以做到最小,如果还发生这种情况,则通常是缺少第三方库导致的

2. 被安全软件拦截

如果注册失败,可以关闭安全软件,比如360、瑞星等杀毒或者其它权限管理工具试试

3. 系统权限问题

该问题在旧的系统上出现概率较低,因为旧的系统对权限的限制较小,而目前的多数系统,特别是从vista开始,比如win7、win8、win10等等对权限的限制非常严格,对于大多数用户来说都没有注册控件这种权限,包括普通的管理员。所以为了得到这个权限,必需使用Administrator登录系统来注册,否则,必需在cmd.exe上点鼠标右键选择“以管事员身份运行”来启动cmd窗口,然后在其中输入注册命令才可成功

4. 系统的位宽问题

早前系统只有32位的不会存在此问题,目前的win7、win8、win10都有32位和64位的区别,所以控件也区分是32位和64位。目前来说,我们的程序可能多数都是32位的,除非指定了64位编译。

如果操作系统是64位,而控件是32位的,则可能需要指定正确的注册命令,通常来说需要使用 c:/windows/sysWOW64目录中regsvr32.exe来注册控件,即 c:/windows/sysWOW64/regsvr32 "d:/XXXX/XXXX.ocx"

 排除不可能存在的问题后,找到了我的错误原因,权限不足,于是用管理员权限打开PowerShell,并运行命令,注册成功。

以此记录下来。

 

 

你可能感兴趣的:(C++,教程)