InitializeCriticalSectionEx Not Located In KERNEL32.Dll
InitializeCriticalSectionEx Not Located In KERNEL32.Dll
我正在尝试在VS2015中构建一个dll项目以将其部署在Windows XP上。它适用于Windows 7,但在Windows XP SP3上给出错误:
过程入口点初始化关键部分Ex 无法在动态链接库KERNEL32.dll
中找到
我用以下方法构建了库:Configuration=Release;Platform=x86;PlatformToolset=v140_xp;
不幸的是,即使安装了 SP3,在 Kernel32.dll 的 XP 版本中也不存在InitializeCriticalSectionEx
功能。直到Vista才推出。您正在使用的驱动程序似乎与XP不完全兼容。
是否可以在不降级构建平台工具集的情况下解决此问题?
由于您需要 DLL 在InitializeCriticalSectionEx()
不可用的操作系统上运行,因此无法在编译时静态链接到该函数。 这就是您收到入口点错误的原因。
相反,您必须在运行时使用GetProcAddress()
(或链接器的延迟加载功能,该功能在内部使用GetProcAddress()
(动态加载InitializeCriticalSectionEx()
函数。
如果InitializeCriticalSectionEx()
函数在运行时无法加载,则代码可以回退到其他内容,例如InitializeCriticalSection()
甚至InitializeCriticalSectionAndSpinCount()
。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- DeleteFile (kernel32.dll) vs DeleteItem (shell32.dll)
- HANDLE(IntPtr)已过时,kernel32.dll,安全文件句柄到IntPtr
- VirtualProtect和kernel32.dll-试图访问无效地址
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 在Win10上使用Cygwin构建了exe,但关于kernel32.dll出现错误
- 为什么我们需要链接kernel32.dll, user32.dll等.在Windows c++中
- 如何在不链接kernel32.dll和ntdll.dll的情况下运行PE映像