我正在使用 C++ 程序编写VS2015(平台工具集 v140,目标平台 8.1)在 Windows 10 计算机上,我的程序直到最近在 Windows 7、8 和 10 上运行得很好。
添加触摸支持后使用GetPointerInfo(),我在 Windows 7 机器上执行时立即收到此弹出错误:
无法在 USER32.dll 中找到名为 GetPointerInfo 的入口点
MS明确指出GetPointerInfo()
仅在 Win8 及更高版本上受支持,这没关系,但我不想完全破坏我的程序与 Windows 7 的兼容性。
我假设 Windows 7 的版本是USER32.DLL
根本不包含该函数,但在我的程序中添加运行时检查(即仅调用GetPointerInfo()
if IsWindows8OrGreater()
返回 true)并不能解决问题。
事实上,仅仅编译我的程序并参考GetPointerInfo()
无论该函数是否实际被调用,都会破坏Win7兼容性。程序根本就进不去WinMain()
,它只是向我抛出该消息并退出。
同样,在 Windows 8 及更高版本上,一切都运行良好。
我该如何解决这个问题?
我在 Google 上搜索了半天,但对 DLL、链接器和编译器设置知之甚少,显然我什至不知道如何表达我的搜索,因为到目前为止我一无所获。
我尝试过多线程 (/MT) 和多线程 DLL (/MD) 作为我的运行时库。
我还尝试启用和禁用功能级链接,但结果仍然相同。
我假设 Windows 7 版本的 USER32.dll 根本不包含该函数
那是对的。
但在我的程序中添加运行时检查(即仅在 IsWindows8OrGreater 上调用 GetPointerInfo)并不能解决问题。 :(
如果您在运行时动态加载该函数(通过使用链接器的延迟加载功能,或使用GetProcAddress()直接在您的代码中(链接器的延迟加载器使用GetProcAddress()
内部为您服务)。
事实上,仅仅使用任何对 GetPointerInfo 的引用来编译我的程序都会破坏 Win7 兼容性,无论该函数是否实际被调用。
仅当您在编译时静态链接到该函数而不使用链接器的延迟加载功能时,才会发生该错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)