各位大哥:
       我在DEBUG版本下一调试COM组件诊断宏就会报错(包括客户程序和组件,组件我已复制到客户程序目录下,两个都用RELEASE版本才OK),另外DEBUG版本的进程内组件不能注册,一注册就会出错,现在只能用RELEASE版本(及不方便)。请问DEBUG下,如何调试COM组件?

解决方案 »

  1.   

    用一个程序调用这个组件,然后把这个程序作为宿主进行调试,对于activex可以这样调试,对于COM+组件以DLLHost作为宿主
      

  2.   

    不可能不能注册吧,用regsvr32。设断点键盘F5后选择客户程序就可以调试了
      

  3.   

    kingzai()你的方法在加载组件时会出错(组件正确,至少RELEASE可以使用),
    xiaoyuzi(小鱼子) 用regsvr32注册DEBUG版本的组件时就会出错,用RELEASE版本的就没有问题。
      

  4.   

    注册函数全部是MFC自动生成的
    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就没有问题
        
      

  5.   

    我的系统是Windows 2000 Server + SP4 不知道有没有关系