2015-11-04 37 views
0

我有一個C++非託管dll。我沒有這個DLL的來源,我需要在ATL項目中使用它在ATL項目中使用第三方dll

但我總是得到一個錯誤「檢索COM類工廠的組件與CLID {id}失敗,由於以下錯誤:80040154類未註冊「

我試圖使用regsvr32註冊該dll,但沒有成功 我已經閱讀了很多教程,但他們都解釋瞭如何從頭開始創建ATL項目。而且他們不使用普通dll

我該如何解決這個問題?

+0

沒有證據表明,你正在努力實現的DLL的真正目的是什麼。是的,假設有一些COM註冊。多種可能的問題,例如缺少靜態鏈接依賴。 –

+0

@Roman R.謝謝你的回答。這個DLL在通常的C++項目中起作用。我必須在ATL項目中使用它。這是一個很老的atl項目。我不能重寫它 – Capricornus

回答

0

我之前的ATL項目都是32位的。一切工作正常。

該項目爲64位。 我發現了Visual Studio中有一個錯誤: MSBuild ignores linker option "Register Output: Yes" for x64 Platform

解決方法1(從上面的鏈接):

<Target Name="RegisterOutput" 
     Condition="'$(EmbedManifest)'=='true' and '$(LinkSkippedExecution)' != 'true' and (('$(Platform)' == 'x64' and ('$(PROCESSOR_ARCHITECTURE)' == 'AMD64' or '$(PROCESSOR_ARCHITEW6432)' == 'AMD64')) or '$(Platform)' == 'Win32')"> 

解決方法2(我曾在同一個解決方案C#項目,所以我用這個):

添加regsvr32 path_to_cpp.dll到後期生成事件

注:你不應該添加REGSVR32預建,因爲它不會永遠執行(另外的一個問題)

從MSDN:

Pre-build events do not run if the project is up to date and no build is triggered.