InitializeCriticalSectionEx Not Located In KERNEL32.Dll

InitializeCriticalSectionEx Not Located In KERNEL32.Dll

本文关键字:KERNEL32 Dll In Located Not InitializeCriticalSectionEx      更新时间:2023-10-16

我正在尝试在VS2015中构建一个dll项目以将其部署在Windows XP上。它适用于Windows 7,但在Windows XP SP3上给出错误:

过程入口点初始化关键部分Ex 无法在动态链接库KERNEL32.dll

中找到

我用以下方法构建了库:Configuration=Release;Platform=x86;PlatformToolset=v140_xp;

不幸的是,即使安装了 SP3,在 Kernel32.dll 的 XP 版本中也不存在InitializeCriticalSectionEx功能。直到Vista才推出。您正在使用的驱动程序似乎与XP不完全兼容。

是否可以在不降级构建平台工具集的情况下解决此问题?

由于您需要 DLL 在InitializeCriticalSectionEx()不可用的操作系统上运行,因此无法在编译时静态链接到该函数。 这就是您收到入口点错误的原因。

相反,您必须在运行时使用GetProcAddress()(或链接器的延迟加载功能,该功能在内部使用GetProcAddress()(动态加载InitializeCriticalSectionEx()函数。

如果InitializeCriticalSectionEx()函数在运行时无法加载,则代码可以回退到其他内容,例如InitializeCriticalSection()甚至InitializeCriticalSectionAndSpinCount()