C++ 运行-时间库设置为/MT,但api-ms-win*.dll 仍然缺失
C++ Run-Time Library is set to /MT, but api-ms-win*.dll's are still missing
我正在使用 Visual Studio 2013 (v120_xp),并且我正在使用静态库进行编程。 "Run-Time Library" 设置为 /MT(多线程),因此我不需要外部 .dll。今天我添加了一个函数来显示 Windows 8 toast notifications from desktop app. 一切正常,但是当我在使用 Windows XP 或 Vista 的虚拟机上测试程序时,它显示 "api-ms-win-core-winrt-string-l1-1-0.dll" 和 "api-ms-win-core-winrt-l1-1-0.dll" 没有找到。当我将提到的 *.dll 粘贴到与 .exe 相同的文件夹时 - 一切运行正常。我的问题是:我应该怎么办,把那些.dlls link 当作static?我讨厌使用额外的 .dll,我希望我的程序非常便携(仅限于 1 个 .exe 文件)。对不起,如果我的问题不够清楚,但我希望它是可以理解的。我把编程当成一种爱好,所以还有很多东西要学。
您调用的函数在Windows之前的版本中不可用 8. 复制DLL 肯定是错误的。您绝对不能合法分发 Windows DLL,并且在任何情况下您都不能期望在不同版本上使用为一个版本设计的 DLL。
您将需要使用动态运行时链接到这些 DLL,并且仅在支持此功能的 Windows 版本上调用这些函数。
Link 通过使用 /delayload
或显式调用 LoadLibrary
和 GetProcAddress
动态地实现。
我正在使用 Visual Studio 2013 (v120_xp),并且我正在使用静态库进行编程。 "Run-Time Library" 设置为 /MT(多线程),因此我不需要外部 .dll。今天我添加了一个函数来显示 Windows 8 toast notifications from desktop app. 一切正常,但是当我在使用 Windows XP 或 Vista 的虚拟机上测试程序时,它显示 "api-ms-win-core-winrt-string-l1-1-0.dll" 和 "api-ms-win-core-winrt-l1-1-0.dll" 没有找到。当我将提到的 *.dll 粘贴到与 .exe 相同的文件夹时 - 一切运行正常。我的问题是:我应该怎么办,把那些.dlls link 当作static?我讨厌使用额外的 .dll,我希望我的程序非常便携(仅限于 1 个 .exe 文件)。对不起,如果我的问题不够清楚,但我希望它是可以理解的。我把编程当成一种爱好,所以还有很多东西要学。
您调用的函数在Windows之前的版本中不可用 8. 复制DLL 肯定是错误的。您绝对不能合法分发 Windows DLL,并且在任何情况下您都不能期望在不同版本上使用为一个版本设计的 DLL。
您将需要使用动态运行时链接到这些 DLL,并且仅在支持此功能的 Windows 版本上调用这些函数。
Link 通过使用 /delayload
或显式调用 LoadLibrary
和 GetProcAddress
动态地实现。