C++ 计算机中缺少api-ms-win-core-winrt-string-l1-1-0.dll

C++ 计算机中缺少api-ms-win-core-winrt-string-l1-1-0.dll,c++,.net,windows,visual-studio,win-universal-app,C++,.net,Windows,Visual Studio,Win Universal App,我正在编写一个需要在Windows7、8.x和10上运行的程序。该程序有一个(相对较小的)功能,它依赖于仅在Windows 10上可用的Windows API。这个特性在Win7上显然不起作用,在调用这些API之前,我要确保当前的操作系统是Windows 10 为了使用这些API,我不得不将我的VS2015项目配置为“使用Windows运行时扩展”(/ZW),并将“目标平台版本”设置为10.0.10586.0 但是,当我尝试在Windows 7上运行应用程序时,这会导致一个问题。我收到一个错误对

我正在编写一个需要在Windows7、8.x和10上运行的程序。该程序有一个(相对较小的)功能,它依赖于仅在Windows 10上可用的Windows API。这个特性在Win7上显然不起作用,在调用这些API之前,我要确保当前的操作系统是Windows 10

为了使用这些API,我不得不将我的VS2015项目配置为“使用Windows运行时扩展”(/ZW),并将“目标平台版本”设置为10.0.10586.0

但是,当我尝试在Windows 7上运行应用程序时,这会导致一个问题。我收到一个错误对话框,上面说“程序无法启动,因为您的计算机缺少api-ms-win-core-winrt-string-l1-1-0.dll”。我试图在Win7机器上安装VS2015可再发行软件包,但这并没有解决问题

你知道如何让它在Win7上运行吗?我真的不想把所有代码都改成动态加载所有Windows10函数


程序是用C++编写的,Windows API是从WINDOWS .DEVICIC.WiFixDebug空间.< /P> < P>我把所有WIN10唯一API调用移动到代理DLL,最后用/ZW编译,最终解决了这个问题。然后,我从主程序中删除了/ZW开关,然后允许它在Windows7下运行。仅当我的程序在Windows 10计算机上运行时,才会加载代理DLL(使用LoadLibrary()调用)

这就解决了问题。我确实需要为DLL编写一些代理函数,但这比为所有仅Win10 API调用编写代理函数的开销要大得多


我仍然希望听到更好的解决方案,如果有的话。

通过使用“ABI”API,不使用/ZW开关就可以访问Windows 10 API。详情如下:

您必须通过LoadLibrary/GetProcAddress使用类似“RoGetActivationFactory”和“WindowsCreateString”的API,因为您无法链接到它们,因为它们在Windows7上不可用。别忘了将WINVER和_WIN32_WINNT定义到Windows 7:


这将允许您不链接到Windows 7上没有可用的API。

这是关于C++还是C++?您使用的API是什么?很可能有一种解决方案可以在经典的桌面应用程序中运行。这是仅限Windows 10应用程序的一个明显限制。不管你的好意是什么,它都不会起作用。C程序的一个很好的特性是,它只在你使用DLL代码时加载DLL。用[MethodImpl(MethodImplOptions.NoInLine)]装饰方法是最好的。但很明显,您并不是在谈论C#,/ZW选项是一个C++/CX编译选项。从C#调用WinRT/UWP方法也很容易,但是您必须手动编辑项目文件以添加所需的
元素。现在你添加了一个WRRT库的引用。抱歉,伙计们,我忘了提到这是一个C++程序。我使用的Windows API是来自WINDOWS.DEVICES.WiFixDebug St.@ HANSPASATE,您的建议解决方案对C++项目是否有效?我不确定我是否理解你的建议。