首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有MSVCR90D.dll的情况下创建Win32 DLL?

如何在没有MSVCR90D.dll的情况下创建Win32 DLL?
EN

Stack Overflow用户
提问于 2009-05-12 20:15:56
回答 5查看 5.9K关注 0票数 2

我正在尝试用一个简单的函数重新创建一个现有的C Win32动态链接库。我已经成功地使用VSVista2008Express做到了这一点,并且我的新C++可以在我的Vista机器和客户端的XP机器上工作。然而,它在其他网站上不起作用。我检查了依赖关系,我的DLL需要MSVCR90D.dll和KERNEL32.dll,而原来的DLL只需要KERNEL32.dll。

什么是MSVCR90D.dll,如何在没有此依赖项的情况下创建一个简单的Win32 DLL?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-12 20:43:54

链接到C运行时库的静态版本。该设置位于项目属性中的“代码生成”下。这样你就完全不需要担心MSVCR* all了。

票数 2
EN

Stack Overflow用户

发布于 2009-05-12 20:17:14

MSVCR90D.dll末尾的D表示您在调试模式下编译了.exe。您应该只在发布模式下分发应用程序。

您可以通过让他们安装Microsoft Visual C++ 2008 Redistributable Package x86x64来确保他们拥有所需的一切。否则,您可以通过在您的计算机上找到它们来简单地复制它们所需的文件(首先在%systemroot%\system32处检查)

请参阅this MSDN link

票数 8
EN

Stack Overflow用户

发布于 2009-05-12 22:35:02

名称中的“D”表示调试。这是Visual Studio的Debug版本的一个明确指示器。使用发布版本,一切都会好起来的。

如果目标系统还没有C运行时,通常应该使用官方安装程序将其安装在目标系统中。您可能想了解以下运行时的一些版本:

x86

  • VS2005 x86

  • VS2008 x64

  • VS2008
  • VS2005 SP1 x86 SP1 x86

您还可以开发一个完整的安装包,其中包括应用程序所需的可重新分发的DLL(但决不是调试DLL),并使用一种称为合并模块的技术正确地处理并排(SxS)程序集在系统程序集缓存中的安装。如果您完全安装了Visual Studio (不是免费的VS Express版),则此方法会更容易,但生成的安装包可能根本不能很好地处理在较旧(如Win 2K或9x)平台上安装运行时。

MSDN文章Redistributing Visual C++ Files描述了这些规则是什么,以及如何尽可能容易地遵守这些规则。它为了解更多与部署相关的问题提供了一个起点。

如果要替换其功能的原始DLL没有对MSVCR90.DLL的引用,则它必须静态链接到运行库。您可能应该检查将调用您的DLL的预期应用程序的假设。在单个进程中混合使用C运行时库并不总是那么容易。如果宿主应用程序已经在使用MSVCR90.DLL,那么您也应该这样做。然而,这是一个比手头具体问题的答案更大的问题,所以我鼓励您研究它,并根据需要提出新的问题。

避免安装以后的运行时DLL的另一种方法是链接到MSVCRT.DLL,它作为系统组件随windows的现代版本一起分发。这是Visual C 6.0附带的运行时,针对关键问题进行了轻微更新,并保持与操作系统匹配的最新版本。它根本不适用于64位版本,而且很难诱使Visual Studio使用它来代替较新的运行时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/854653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档