在ATL项目

时间:2015-11-04 13:28:12

标签: visual-c++ com atl

我有一个C ++非托管DLL。我没有这个dll的来源,我需要在ATL项目中使用它

但是我总是收到错误“由于以下错误,检索CLID {id}组件的COM类工厂失败:80040154 class not registered”

我尝试使用regsvr32注册该dll,但没有成功 我已经阅读了很多教程,但他们都解释了如何从头开始创建ATL项目。他们不使用普通的dll

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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:

  

如果项目是最新的并且没有触发构建,则不会运行预构建事件。