各位大哥:
我在DEBUG版本下一调试COM组件诊断宏就会报错(包括客户程序和组件,组件我已复制到客户程序目录下,两个都用RELEASE版本才OK),另外DEBUG版本的进程内组件不能注册,一注册就会出错,现在只能用RELEASE版本(及不方便)。请问DEBUG下,如何调试COM组件?
我在DEBUG版本下一调试COM组件诊断宏就会报错(包括客户程序和组件,组件我已复制到客户程序目录下,两个都用RELEASE版本才OK),另外DEBUG版本的进程内组件不能注册,一注册就会出错,现在只能用RELEASE版本(及不方便)。请问DEBUG下,如何调试COM组件?
xiaoyuzi(小鱼子) 用regsvr32注册DEBUG版本的组件时就会出错,用RELEASE版本的就没有问题。
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllGetClassObject(rclsid, riid, ppv);
}STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllCanUnloadNow();
}//{7CCA7A20-A64A-4F16-B393-8219DBB160A7}
const static GUID theTypeLibGUID =
{ 0x7CCA7A20, 0xA64A, 0x4F16, { 0xB3, 0x93, 0x82, 0x19, 0xDB, 0xB1, 0x60, 0xA7 } };// by exporting DllRegisterServer, you can use regsvr.exeSTDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
COleObjectFactory::UpdateRegistryAll();
VERIFY(AfxOleRegisterTypeLib(AfxGetInstanceHandle(),
theTypeLibGUID, "ex25b.tlb"));
return S_OK;
}int CEx25bApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
return CWinApp::ExitInstance();
}
这个是VC++技术内幕上EX25B的例程里的注册函数,基本上都是自动生成的除了
VERIFY(AfxOleRegisterTypeLib(AfxGetInstanceHandle(),
theTypeLibGUID, "ex25b.tlb"));//去掉也无所谓
注册DEBUG版本时出错信息如下:
Debug Assertion Failed!
Program: C:\WINNT\system32\regsvr32.exe
File:olelink.cpp
Line:291
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts
(Press Retry to debug the application)而RELEASE就没有问题