【问题标题】:Use third-party dll in ATL project在 ATL 项目中使用第三方 dll
【发布时间】:2016-02-05 00:35:34
【问题描述】:

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

但我总是收到错误“检索带有 CLID {id} 的组件的 COM 类工厂失败,原因是以下错误:80040154 类未注册”

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

我该如何解决这个问题?

【问题讨论】:

  • 没有证据表明您试图实现的正是 DLL 的真正用途。是的,假设有一些 COM 注册。多个可能的问题,例如缺少静态链接依赖。
  • @Roman R. 谢谢你的回答。这个 dll 在通常的 c++ 项目中工作。我必须在 ATL 项目中使用它。这是一个很大的旧 atl 项目。我不能重写它

标签: visual-c++ com atl


【解决方案1】:

我以前的所有 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:

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

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多