调试OCX控件的DllRegisterServer函数

今天遇到一个问题。

 

一个OCX程序,编译完成后注册的时候弹出一个断言错误。

注册控件失败了。

 

经过分析,可能是OCX的注册函数出了问题。

VC6生成的控件程序中DllRegisterServer都一样。如下所示。

STDAPI DllRegisterServer(void)
{
    AFX_MANAGE_STATE(_afxModuleAddrThis);

 

    if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
        return ResultFromScode(SELFREG_E_TYPELIB);

    if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
        return ResultFromScode(SELFREG_E_CLASS);

}

 

怎样调试到这个函数里面,是个问题。

普通的方法肯定行不通。

 

经过几次尝试后,终于调试成功。

对OCX工程做一些设置,如图所示。

 

 

 

 

解释一下,OCX自己不能执行,必须有调用的exe,

所以在Executable for debug session中输入C:/Windows/system32/regsvr32.exe作为启动程序。

Program arguments中输入本OCX为参数。

 

这样,执行后,会启动

C:/Windows/system32/regsvr32.exe Debug/TestActiveX1.ocx。

 

在执行前,在

STDAPI DllRegisterServer(void)
{
    AFX_MANAGE_STATE(_afxModuleAddrThis);

 

    if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
        return ResultFromScode(SELFREG_E_TYPELIB);

    if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
        return ResultFromScode(SELFREG_E_CLASS);

}

的AFX_MANAGE_STATE(_afxModuleAddrThis); 处加入断点。

 

在VC6中启动调试,刷的一下,就执行到了断点处。

 

单步跟踪了一下,很快问题点找到了。

 

原来是一个String资源没有添加,导致MFC的断言错误了。

 

加上相应的String资源后,再编译,注册成功了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值