2023年12月11日发(作者:)

无法定位程序输入点InitializeCriticalSectionEx于动态链接库ker。。。

无法定位程序输入点InitializeCriticalSectionEx 于动态链接库

近期一个Opencv3.1项目需要在XP系统上跑,

用win10+VS2017开发的Dll,使用支持XP的141工具集,在XP上跑一直显示:

"无法定位程序输入点InitializeCriticalSectionEx 于动态链接库"

然后在XP虚拟机上安装了VS2010,在XP环境下编译一样报错.

折腾了两天,在国外论坛上发现根源所在,VS2010在XP环境下的sdkddkver.h定义了操作系统编号:

#define _WIN32_WINNT 0x0601

Opencv在XP下编译其中源码:

#if _WIN32_WINNT >= 0x0600

if(InitializeCriticalSectionEx(&pMutex->mutex, 0, 0) == 0)

return OWN_STATUS_FAIL;

return OWN_STATUS_OK;

#else

__try

{

InitializeCriticalSection(&pMutex->mutex);

}

__except(EXCEPTION_EXECUTE_HANDLER)

{

return OWN_STATUS_FAIL;

}

return OWN_STATUS_OK;

#endif

PS:尝试了网上说的在在Stdafx.h 头文件 #pragma once 下面添加

#define WINVER _WIN32_WINNT_WINXP

#define _WIN32_WINNT _WIN32_WINNT_WINXP 然而并没有什么卵用

其中默认_WIN32_WINNT 值为 0x0601 XP的kernel没有这个InitializeCriticalSectionEx函数,只有InitializeCriticalSection函数,解决方

案:

1. 替换所有InitializeCriticalSectionEx为InitializeCriticalSection

2. 修改系统头文件sdkddkver.h 把

#define _WIN32_WINNT 0x0601 改为:

#define _WIN32_WINNT _WIN32_WINNT_WINXP

重新编译opencv,问题完美解决.