2012-11-12 13 views
3

我是COM中的新手,並且在調試dll時遇到問題。在此代碼中:CoCreateInstance在Release中很好用,但在調試中不是

 _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. 

哪裏是一個錯誤?

+1

錯誤是告訴你RWUXThemeS.dll是沒有調試信息而構建的,你無法調試到這個庫中。你可以繼續這個呼叫而不是踏入它嗎? – Jaywalker

+0

「某個應用程序嘗試錯誤地加載C運行時庫」可能表示缺少crt dll或混合調試/發佈運行時等。使用Dependency Walker來找出問題。 – stijn

+0

如果我一步一步地出現錯誤,應用程序會嘗試錯誤地加載C運行時庫。 – GrinderZ

回答

3

看起來像是混合了和Release MS CRT庫的組裝版本。 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

+0

在VS2008的Modules窗口中,我找到了RWUXThemeSD.dll。它帶有消息「模塊沒有加載默認加載地址」。在RWUXThemeSD.dll的狀態中,同樣的麻煩「Binary沒有用調試信息構建」。 – GrinderZ

+0

請參閱Rogue Wave Stingray Studio文檔,也許我錯了,並且調試庫名稱不同。 – Rost

+0

你說得對。調試庫名稱是「RWUXThemeSD.dll」。 – GrinderZ

相關問題