VS 2005 C++ 项目中的 msvcr90.dll 依赖项

2023-12-25

我在 VS 2005 中为本机 Win32/非托管 C++ 创建了一个 DLL 项目,将其命名为 myProj.dll。它依赖于第 3 方商业 DLL,而该 DLL 又依赖于 msvcr90.dll(我假设它是从 VS 2008 项目构建的)。我将其命名为thirdParty.dll。

我的 DLL 项目在 VS2005 中构建得很好。我构建了一个链接到 myProj.lib 的测试应用程序(同样是 VS 2005 Win32 C++)。 (顺便说一句,根据 .lib 的小尺寸以及在运行时应用程序必须找到 myProj.dll 的事实来判断,我猜测 .lib 只是调用的包装器loadLibrary() 加载实际的 DLL;是不是很接近?)

我的问题是,在运行时,测试应用程序无法找到 msvcr90.dll (也无法找到 msvcp90.dll),其依赖源于thirdParty.dll。

我已经安装了 Microsoft 的 redist 软件包,因此 c:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_... 中也安装了所有 std (9.0) C++ 库。更重要的是,如果我将依赖项遍历器指向thirdParty.dll,它会很高兴地解析对该位置的引用。

但是,如果我将 dependent.exe 指向我的测试应用程序 (.exe) 或 myProj.dll,则找不到 msvcr90.dll 和 msvcp90.dll。

我猜我需要在 VS2005 中配置一些东西,以便 .exe 或 myProj.dll 知道 9.0 版本的 std C++ 库的位置(大概是 redist 包将它们安装在 C:\WINDOWS\WinSxS 中的位置) ),但我似乎无法弄清楚它是什么。我走在正确的轨道上吗?

我注意到,如果我只是将 msvc*90.dll 文件复制到我的应用程序目录,那么依赖关系就会得到解决,但我会收到有关 std c++ DLL 加载不当等的运行时错误。

预先非常感谢。


这看起来像一个“并排大会”问题给我。

据我所知,微软试图阻止DLL Hell过去几年的问题引入了一个概念“并排大会”。

简而言之,这意味着您的应用程序需要告诉Windows哪个版本的CRT它的设计目的是与.安装应用程序时,Windows 将确保您的应用程序获得这些 DLL 文件的自己的私有副本。

为了使其正常工作,您需要将应用程序的 DLL 依赖项嵌入到应用程序中Manifest文件并将其附加到项目中使用清单工具, 输入输出应用程序项目设置部分。

作为一个例子,这里是我使用的清单Windows 版宙斯 http://www.zeusedit.com IDE:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
      name="Xidicone.Windows.Zeus for Windows"
      version="3.9.6.69"
      processorArchitecture="X86"
      type="win32" />

  <description>Zeus for Windows</description>

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
            type="win32"
            name="Microsoft.VC80.CRT"
            version="8.0.50608.0"
            processorArchitecture="x86"
            publicKeyToken="1fc8b3b9a1e18e3b" />
    </dependentAssembly>
  </dependency>

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="X86"
          publicKeyToken="6595b64144ccf1df"
          language="*" />
    </dependentAssembly>
  </dependency>
</assembly>

最后,如果您计划制作安装程序,则需要将这些 DLL 文件的相同版本添加到应用程序安装程序中,或者让您的安装程序运行 Microsoft CRT 可再发行安装程序。

FWIW当用户报告时我才发现这一点Zeus http://www.zeusedit.com由于缺少 MSVCRT 运行时 DLL 文件,不再在 Windows XP 上运行Zeus http://www.zeusedit.com10 多年来一直运行良好,无需附带 MSVCRT 运行时 DLL 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS 2005 C++ 项目中的 msvcr90.dll 依赖项 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐