2015-11-04 98 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.

相关问题