我正在尝试在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()
。