CoCreateInstance在Release中运行良好,但在调试中却没有

时间:2012-11-12 10:09:42

标签: c++ debugging dll com

我是COM中的新手,在调试dll时遇到问题。在这段代码中:

        _Check_return_ HRESULT CoCreateInstance(_In_ REFCLSID rclsid, _In_opt_ LPUNKNOWN pUnkOuter = NULL, _In_ DWORD dwClsContext = CLSCTX_ALL)  
throw()  
    {  
        ATLASSERT(p == NULL);  
        return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p);  
    }

作为回报我有错误R6034:应用程序试图错误地加载C运行时库。

Plus:在VS 2008的输出窗口中,我注意到调试在某些消息处停止:

'OmpClimApp.exe': Loaded '\\omegaserver\omega\app32\OMEGA.DLL\RWUXThemeS.dll', Binary was not built with debug information.

哪里出错?

1 个答案:

答案 0 :(得分:3)

看起来问题是混合MS CRT库的DebugRelease汇编版本。 Microsoft.VC80.CRTMicrosoft.DebugVC80.CRT程序集使用相同的公共publicKeyToken "1fc8b3b9a1e18e3b",因此无法将它们同时加载到单个应用程序中。

在您的情况下,RWUXThemeS.dll的清单引用Microsoft.VC80.CRT,但Debug版本中您的应用的清单引用Microsoft.DebugVC80.CRT。试图加载RWUXThemeS.dll会导致错误描述实际上不正确,它应该是“无法加载程序集,哪个公钥已被另一个程序集使用”。

可能的解决方案:您需要在调试版本中将RWUXThemeS.dll的调试版本链接到您的应用程序。假设其名称为RWUXThemeSD.dll

请参阅MSDN for more details(社区内容,主要文章与您的问题无关)。

RWUXTheme库是Rogue Wave Stingray Studio的一部分,请参阅documentation