Visual C ++创建DLL缺少依赖项

时间:2016-01-03 01:47:10

标签: c++ visual-studio dll

我刚刚使用Visual Studio 2015创建了一个C ++ DLL。 我没有对默认来源进行编辑。 然后我使用DependencyWalker查看我的所有DLL依赖项,我看到了这个:

this

您可以清楚地看到大部分所需的dll都丢失了。

当我尝试连接到这样的DLL时,我发现错误的那些库...

我尝试连接到CodeBlocks中生成的DLL,它没有给我任何错误。

怎么回事?

PS:

以下是错误消息:

  

程序无法启动,因为您的MSVCP140_APP.dll丢失了   计算机。尝试重新安装程序以解决问题。

我的问题的更多信息可以be seen here

1 个答案:

答案 0 :(得分:4)

您的问题由两部分组成。

第一部分

  

您可以清楚地看到大部分所需的dll都丢失了。

在Windows 7中引入的

api-ms-win-*模块系列由微小的存根DLL组成,它们将核心库(例如kernel32user32等)中的函数调用重定向到其他地方的实现

他们并没有真正失踪,只是Dependency Walker可笑地过时了(最新版本可以追溯到2006年)并且不知道在哪里搜索。实际上,您可以检查链接到系统库的任何成功运行的Windows二进制文件,并查看完全相同的图片。

api-ms-win-*这是Windows实施的内部细节,你不应该担心它,除非你在Windows内核团队的Microsoft工作。

第二部分

  

当我尝试连接到这样的DLL时,我会收到这些库的错误   丢失...我尝试连接到CodeBlocks中生成的DLL和它   没有给我任何错误。

Visual C++ -> DLL (Universal Windows)
Visual C++ -> Win32 Project

您正在混合使用Win32应用程序(使用优秀的'ol Win32 API)和Universal Windows Platform libary(之前的Windows RT)。

相反,你应该:

  • (Win32方式)使用Visual C++ -> Win32 Project模板创建常用的Win32 DLL,然后选择Application type: DLL,然后将其与Win32应用程序链接。

  • (WinRT方式)创建通用Windows应用以链接通用Windows DLL

代码块在这里起作用,因为它不会(并且可能永远不会)支持UWP。

P.S。除非您知道自己的内容,否则不应明确链接VCRUNTIME140_APP.dll或更差api-ms-win-*.dll

P.P.S。说实话,你can mix UWP and Win32 in a limited way。但是,我们称之为一个高级主题,并将其作为一个练习给好奇的读者。

链接: