繁体   English   中英

InitializeCriticalSectionEx 不在 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.

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