Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ InitializeCriticalSectionEx不在KERNEL32.Dll中_C++_Windows_Visual Studio - Fatal编程技术网

C++ InitializeCriticalSectionEx不在KERNEL32.Dll中

C++ InitializeCriticalSectionEx不在KERNEL32.Dll中,c++,windows,visual-studio,C++,Windows,Visual Studio,我正在尝试在VS2015中构建一个dll项目,以便将其部署到Windows XP上。它在Windows 7上工作,但在Windows XP SP3上出现错误: 在动态链接库KERNEL32.dll中找不到过程入口点InitializecriticalSectionEx 我用以下方法建立了图书馆: 配置=发布;平台=x86;平台工具集=v140_xp 不幸的是,即使安装了SP3,该函数在XP版本的Kernel32.dll中也不存在。直到Vista才推出。您使用的驱动程序似乎与XP不完全兼容 是否可

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

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

我用以下方法建立了图书馆:
配置=发布;平台=x86;平台工具集=v140_xp

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


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

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

相反,您必须在运行时使用动态加载
InitializeCriticalSectionEx()
函数(或者,在内部使用
GetProcAddress()


如果
InitializeCriticalSectionEx()
函数在运行时加载失败,那么您的代码可以退回到其他程序,例如,甚至。

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

相反,您必须在运行时使用动态加载
InitializeCriticalSectionEx()
函数(或者,在内部使用
GetProcAddress()


如果
InitializeCriticalSectionEx()
函数在运行时加载失败,那么您的代码可以退回到其他程序,例如甚至。

您应该选择xp toolkit。这是不可解决的,因为无论您使用什么工具箱构建,Windows xp上都不存在
InitializeCriticalSectionEx
。可以使用
InitializeCriticalSection
或使用条件编译来构建2个DLL,以便在较旧和较新的平台上部署。@RichardCriten是的,它是可以解决的,使用动态加载而不是静态链接您应该选择xp toolkit。这是不可解决的,因为无论您使用哪个toolkit构建,Windows xp上都不存在
InitializecriticalSectionEx
。可以使用
InitializeCriticalSection
或使用条件编译来构建2个DLL,以便在较旧和较新的平台上部署。@RichardCriten是的,这是可以解决的,使用动态加载而不是静态链接代替调用InitializeCriticalSection作为备用方法,他可以调用InitializeCriticalSection和SpinCount。如果需要的话,它至少允许设置旋转计数。@dummzeuch谢谢,我更新了我的回答,而不是调用InitializeCriticalSection作为后备,他可以调用InitializeCriticalSection和旋转计数。如果需要,它至少允许设置旋转计数。@dummzeuch谢谢,我更新了我的答案