我有一个C ++非托管DLL。我没有这个dll的来源,我需要在ATL项目中使用它
但是我总是收到错误“由于以下错误,检索CLID {id}组件的COM类工厂失败:80040154 class not registered”
我尝试使用regsvr32注册该dll,但没有成功 我已经阅读了很多教程,但他们都解释了如何从头开始创建ATL项目。他们不使用普通的dll
我该如何解决这个问题?
答案 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:
如果项目是最新的并且没有触发构建,则不会运行预构建事件。