InitializeCriticalSectionEx

InitializeCriticalSectionEx

我正在尝试在VS2015中构建一个dll项目,以将其部署在Windows XP上。它可在Windows 7上运行,但在Windows XP SP3上会出现错误:


  在动态链接库libray KERNEL32.dll中找不到过程入口点InitializecriticalSectionEx


我已经建立了图书馆:
Configuration=Release;Platform=x86;PlatformToolset=v140_xp;

不幸的是,即使安装了SP3,XP版本的Kernel32.dll也没有InitializeCriticalSectionEx函数。直到Vista才引入。看来您使用的驱动程序与XP不完全兼容。

是否有可能在不降级构建PlatformToolset的情况下解决此问题?

最佳答案

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

相反,您将必须在运行时使用InitializeCriticalSectionEx()(或内部使用GetProcAddress()linker's delay-load feature)动态加载GetProcAddress()函数。

如果InitializeCriticalSectionEx()函数无法在运行时加载,则您的代码可以回退到使用InitializeCriticalSection()

10-06 14:07