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

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

近期一个Opencv3.1项目需要在XP系统上跑,
用win10+VS2017开发的Dll,使用支持XP的141工具集,在XP上跑一直显示:
"无法定位程序输入点InitializeCriticalSectionEx 于动态链接库kernel32.dll"
然后在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,问题完美解决.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值