调试OCX控件的DllRegisterServer函数
我今天遇到了一个问题。
一个OCX程序。当它被编译和注册时,会弹出一个断言错误。
无法注册控件。
经过分析,OCX的注册功能可能有问题。
DllRegisterServer在VC6生成的控制程序中是一样的。示例提示如下所示。
STDAPI DllRegisterServer(void)
{
AFX _ MANAGE _ STATE(_ afxModuleAddrThis);
如果(!AfxOleRegisterTypeLib(AfxGetInstanceHandle(),_ tlid))
return ResultFromScode(self reg _ E _ TYPELIB);
如果(!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(self reg _ E _ CLASS);
}
如何调试进这个函数是个问题。
普通的方法肯定不行。
经过几次尝试,调试终于成功了。
对OCX项目进行一些设置,如图所示。
说明OCX不能自己执行,必须有一个被调用的exe。
因此,在调试会话的可执行文件中输入C:\ windows \ system32 \ regsvr32.exe作为启动程序。
在程序参数中输入此OCX作为参数。
这样,执行后会启动
C:\ windows \ system32 \ regsvr 32 . exe debug \ testactivex 1 . ocx。
执行前,在
STD API DLLRegisterServer(void)
{
afx _ manage _ state(_ afxmoduleAddrThis);
如果(!AfxOleRegisterTypeLib(AfxGetInstanceHandle(),_ tlid))
return ResultFromScode(self reg _ E _ TYPELIB);
如果(!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(self reg _ E _ CLASS);
}
的afx _ manage _ state(_ afxmoduleadrhith);在处添加断点。
在VC6中开始调试,一刷就在断点处执行。
我一步跟踪,很快就发现了问题。
原来是没有添加字符串资源,导致了MFC的断言错误。
添加相应的字符串资源后,编译注册成功。
0条评论