设为首页 加入收藏

TOP

调试OCX控件的DllRegisterServer函数
2014-11-23 21:57:38 】 浏览:781
Tags:调试 OCX 控件 DllRegisterServer 函数

  今天遇到一个问题。
  一个OCX程序,编译完成后注册的时候弹出一个断言错误。
  注册控件失败了。
  经过分析,可能是OCX的注册函数出了问题。
  VC6生成的控件程序中DllRegisterServer都一样。Examda提示如下所示。
  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资源后,再编译,注册成功了。 考试大(www.Examda。com)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇程序设计:利用堆排序实现学生成绩.. 下一篇chrome源码解析系列:chrome线程体..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目