不在KERNEL32.Dll中的InitializeCriticalSectionEx

时间:2018-10-13 10:11:52

标签: c++ windows visual-studio

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

  

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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