C++ 运行时库设置为/MT,但 api-ms-win*.dll 仍然丢失

标签 c++ multithreading winapi

我正在使用 Visual Studio 2013 (v120_xp),并且正在使用静态库进行编程。 “运行时库”设置为/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 相同的文件夹时 - 一切运行正常。我的问题是:我应该怎么做才能将这些 .dll 链接为静态?我讨厌使用额外的 .dll,并且我希望我的程序非常可移植(仅限于 1 个 .exe 文件)。抱歉,如果我的问题不够清楚,但我希望它是可以理解的。我把编程当作一种爱好,所以还有很多东西要学。

最佳答案

您正在调用 Windows 8 之前的版本中不可用的函数。复制 DLL 肯定是错误的。您绝对不能合法分发 Windows DLL,并且在任何情况下您都不能指望在不同版本上使用为一个版本设计的 DLL。

您将需要使用动态运行时链接到这些 DLL,并且仅在支持此功能的 Windows 版本上调用这些函数。

通过使用/delayload或显式调用LoadLibraryGetProcAddress来动态链接。

关于C++ 运行时库设置为/MT,但 api-ms-win*.dll 仍然丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441709/

相关文章:

c - 如何从 Win32 中的 func ptr 获取模块句柄?

php - 如何通过 fastcgi 从 C++ 运行 php 脚本

c++ - 可变长度数组 VLA(静态绑定(bind)或动态)

Javascript将SharedArrayBuffer同步到主线程

django - 带有 Django 的 PyMySQL,多线程应用程序

c++ - 在镜像模式下为监视器创 build 备上下文

c++ - 如何创建指向大小未知的多维数组的指针?

c++ - 如何避免远距离的Z-fighting?

c - OpenMP:单一的共享变量,等待构造

security - Win32 : bypassing UAC using user/password