我正在尝试在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的情况下解决此问题?
答案 0 :(得分:3)
由于您需要DLL在InitializeCriticalSectionEx()
不可用的操作系统上运行,因此无法在编译时静态链接到该函数。这就是为什么您遇到入口点错误的原因。
相反,您将必须在运行时使用GetProcAddress()
(或linker's delay-load feature,内部使用InitializeCriticalSectionEx()
)动态加载GetProcAddress()
函数。
如果InitializeCriticalSectionEx()
函数在运行时无法加载,则您的代码可以转而使用InitializeCriticalSection()
。