4

我是 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 运行时库。

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

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

哪里有错误?

4

1 回答 1

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(社区内容,主要文章看起来与您的问题无关)。

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

于 2012-11-12T11:00:06.840 回答