我刚刚使用Visual Studio 2015创建了一个C ++ DLL。 我没有对默认来源进行编辑。 然后我使用DependencyWalker查看我的所有DLL依赖项,我看到了这个:
您可以清楚地看到大部分所需的dll都丢失了。
当我尝试连接到这样的DLL时,我发现错误的那些库...
我尝试连接到CodeBlocks中生成的DLL,它没有给我任何错误。
怎么回事?
PS:
以下是错误消息:
程序无法启动,因为您的MSVCP140_APP.dll丢失了 计算机。尝试重新安装程序以解决问题。
我的问题的更多信息可以be seen here:
答案 0 :(得分:4)
您的问题由两部分组成。
在Windows 7中引入的您可以清楚地看到大部分所需的dll都丢失了。
api-ms-win-*
模块系列由微小的存根DLL组成,它们将核心库(例如kernel32
,user32
等)中的函数调用重定向到其他地方的实现
他们并没有真正失踪,只是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。但是,我们称之为一个高级主题,并将其作为一个练习给好奇的读者。
链接: