我有一个C++非托管dll。我没有这个DLL的来源,我需要在ATL项目中使用它在ATL项目中使用第三方dll
但我总是得到一个错误“检索COM类工厂的组件与CLID {id}失败,由于以下错误:80040154类未注册“
我试图使用regsvr32注册该dll,但没有成功 我已经阅读了很多教程,但他们都解释了如何从头开始创建ATL项目。而且他们不使用普通dll
我该如何解决这个问题?
我有一个C++非托管dll。我没有这个DLL的来源,我需要在ATL项目中使用它在ATL项目中使用第三方dll
但我总是得到一个错误“检索COM类工厂的组件与CLID {id}失败,由于以下错误:80040154类未注册“
我试图使用regsvr32注册该dll,但没有成功 我已经阅读了很多教程,但他们都解释了如何从头开始创建ATL项目。而且他们不使用普通dll
我该如何解决这个问题?
我之前的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.
没有证据表明,你正在努力实现的DLL的真正目的是什么。是的,假设有一些COM注册。多种可能的问题,例如缺少静态链接依赖。 –
@Roman R.谢谢你的回答。这个DLL在通常的C++项目中起作用。我必须在ATL项目中使用它。这是一个很老的atl项目。我不能重写它 – Capricornus