繁体   English   中英

USER32.dll中缺少入口点会阻止程序启动,C ++,VS2015

[英]Missing entry points in USER32.dll stops program from launching, C++, VS2015

我正在Windows 10机器上使用VS2015 (平台工具集v140,目标平台8.1)编写C ++程序,直到最近,我的程序在Windows 7、8和10上都可以正常运行。

使用GetPointerInfo()添加触摸支持后,在Windows 7计算机上执行时,我立即收到此弹出错误:

在USER32.dll中找不到名为GetPointerInfo的入口点

MS明确指出, GetPointerInfo()仅在Win8及更高版本上受支持,没关系,但是我不想完全破坏我的程序与Windows 7的兼容性。

我假设Windows 7的USER32.DLL版本根本不包含该功能,但是在我的程序中添加运行时检查(即,如果IsWindows8OrGreater()返回true,则仅调用GetPointerInfo() )不能解决问题。

实际上,无论是否实际调用函数,仅使用对GetPointerInfo()任何引用编译我的程序都将破坏Win7兼容性。 该程序甚至不会输入WinMain() ,它只会向我抛出该消息并退出。

同样,在Windows 8及更高版本上,一切正常。

我该如何解决?

我已经用Google搜索了半天,但是对DLL,链接程序和编译器设置的了解很少,我显然甚至不知道该如何用短语表达,因为到目前为止我已经空了。

我已经尝试将多线程(/ MT)和多线程DLL(/ MD)用作我的运行时库。

我也尝试过启用和禁用功能级链接,但是结果保持不变。

我假设Windows 7的USER32.dll版本根本不包含该功能

那是对的。

但是在我的程序中添加运行时检查(即仅在IsWindows8OrGreater上调用GetPointerInfo)并不能解决问题。 :(

如果您是在运行时动态加载函数,则可以使用链接器的延迟加载功能 ,也可以直接在代码中使用GetProcAddress() (链接器的延迟加载器内部为您使用GetProcAddress() )。

实际上,仅使用任何对GetPointerInfo的引用编译我的程序都将破坏Win7兼容性,无论是否实际调用了功能。

仅当您在编译时静态链接到该函数而不使用链接器的延迟加载功能时,才会发生该错误。

非常感谢。

GetProcAddress()对我来说是一个很棒的方法。 我遇到了同样的问题。 而且我已经引用了有关使用GetProcAddress()的网站

1.写一些定义

typedef BOOL(WINAPI *GetPointerInfoProc)(UINT32,POINTER_INFO *);

2.延迟加载库

HMODULE hModule = LoadLibrary(TEXT("user32.dll")); GetPointerInfoProc GetPointerInfo = (GetPointerInfoProc )GetProcAddress(hModule, "GetPointerInfo");

3.通话方式

GetPointerInfo(pointerId,&pointerInfo)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM