![](/img/trans.png)
[英]GetOverlappedResultEx could not be located in kernel32.dll
[英]InitializeCriticalSectionEx Not Located In KERNEL32.Dll
我正在尝试在 VS2015 中构建一个 dll 项目以将其部署在 Windows XP 上。 它适用于 Windows 7,但在 Windows XP SP3 上出现错误:
无法在动态链接库 KERNEL32.dll 中找到过程入口点 InitializecriticalSectionEx
我已经使用以下方法构建了库: Configuration=Release;Platform=x86;PlatformToolset=v140_xp;
不幸的是,即使安装了 SP3,Kernel32.dll 的 XP 版本中也不存在InitializeCriticalSectionEx
函数。 它直到 Vista 才被引入。 您使用的驱动程序似乎与 XP 不完全兼容。
是否有可能在不降级构建 PlatformToolset 的情况下解决此问题?
由于您需要 DLL 在InitializeCriticalSectionEx()
不可用的操作系统上运行,因此您不能在编译时静态链接到该函数。 这就是您收到入口点错误的原因。
相反,您必须在运行时使用GetProcAddress()
(或内部使用GetProcAddress()
的链接器的延迟加载功能InitializeCriticalSectionEx()
动态加载InitializeCriticalSectionEx()
函数。
如果InitializeCriticalSectionEx()
函数无法在运行时加载,则您的代码可以回退到其他内容,例如InitializeCriticalSection()
甚至InitializeCriticalSectionAndSpinCount()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.