1、问题描述

原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460

出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeConditionVariable于动态链接库kernel32.dll”

重新搭建开发环境:WinXP SP3 专业版,VS2010,GIGABYTE某motherboard(原谅办公室没别的空闲主机了)

问题依旧存在:重新编译通过,但运行时还是弹框“无法定位程序输入点InitializeConditionVariable于动态链接库kernel32.dll”,我在程序入口下的断点,都没有执行到。

2、原因

(1)如果并不是自己开发的程序:一般就是不兼容,但也有可能是别的原因。

(2)如果想让自己开发的程序在WinXP系统上兼容:不要低估微软,更不要高估寄几。一般没有别的乱七八糟的原因,只是因为WinXP系统的kernel32.dll中并没有InitializeConditionVariable。之前在Win7上开发的时候,你或者MFC程序调用了kernel32.dll中的InitializeConditionVariable,所以在XP上根本运行不了。一般是多线程处理不当造成的。

3、解决方法

(1)如果并不是自己开发的程序:想要尝试解决的话,请参照百度出来的方法,但是一定要提前准备好WinPE系统(U盘启动盘),并且对原kernel32.dll文件进行备份!因为替换kernel32.dll文件极有可能使你的操作系统开不开机。

(2)如果想让自己开发的程序在WinXP系统上兼容:

  • 最好在WinXP上搭建开发环境,再调试代码。
  • 最好直接Google,中文资料质量一般。不要问我怎么知道的o(≧口≦)o
  • 虽然只有两个答案,但都是精华。 参考链接:http://stackoverflow.com/questions/2847960/procedure-entry-point-initializeconditionvariable-could-not-be-located-in-kernel
  • 高票回答中的代码可能并不能解决问题,第二个答案中,答主贴了自己的一篇博客 希望对你萌有所启发,反正是启发到我了(∩_∩)
  • 对于我的程序,我定位到出问题的地方是托盘,托盘涉及到的东西比较底层。现在我把托盘功能注释后可以再WinXP上运行了,接下来看看能否对托盘进行兼容处理,使之在XP上也能运行。

4、后续

WinXP是支持托盘图标的,之所以出错,是因为NOTIFYICONDATA结构也是不断更新升级的。原实现托盘的代码如下:

 //设置托盘图标
m_notify.cbSize=sizeof NOTIFYICONDATA;
m_notify.hWnd=this->m_hWnd;
m_notify.uID=IDR_MAINFRAME;
m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_notify.szTip,"XML解析程序");
m_notify.uCallbackMessage=WM_USER_NOTIFYICON;
m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; //生成托盘
Shell_NotifyIcon(NIM_ADD,&m_notify);

其中第二行 cbSize的赋值在WinXP环境下应改为:

m_notify.cbSize=sizeof NOTIFYICONDATA_V3_SIZE;

具体原因,参考:http://blog.csdn.net/kvs112219/article/details/6069936

以上。

VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库的更多相关文章

  1. VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...

  2. 【转】VS2010下MFC的串口编程

    串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串 ...

  3. VS2010 + winxp 无法定位程序输入点GetTickCount64 在动态链接库kernel32.dll上 错误

    winxp系统,使用VS2010, 在使用boost中的thread中的sleep的时候出现 “无法定位程序输入点GetTickCount64 在动态链接库kernel32.dll上”的错误, 在网上 ...

  4. 无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上

    程序运行提示错误"无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上",网上查了说是opengl的.lib和.dll版本过低, ...

  5. 无法定位程序输入点__gxx_personality_v0的一个解决方法

    windows系统,使用mingw32-g++编译一个简单的工程,编译链接过程都没有错误提示,但是运行的时候会弹出提示框提示"无法定位程序输入点__gxx_personality_v0&qu ...

  6. [qt][问题记录] 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll

    无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll 该问题是没有打包库的问题,之所以出现这个问题的是直接用系统自带的命令行使用qt的windeployqt命令导致提供的库 ...

  7. 无法定位程序输入点到_ftol2于动态链接库msvcrt.dll的错误的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 今天同事在Windows XP系统上运行程序遇到这样一个错误: 我试了一下,在Win7上运行则没有这个错误.只是程序运 ...

  8. dll文件:关于MFC程序不能定位输入点

    问题:无法定位程序输入点到动态链接库上...... 过程:找完整个工程文件夹: APS为资源文件: resource.h为定义文件: 完全复制 除主文件以外的所有文件,程序可用: 在主程序框Cpp文件 ...

  9. 无法定位程序输入点到xxx.dll

    Q:安装pytorch时报错无法定位程序输入点到Anaconda3\Library\bin\libssl-1_1-x64.dll A:下载libssl-1_1-x64.dll覆盖bin下的文件 下载地 ...

随机推荐

  1. Angular动态表单生成(八)

    动态表单生成之拖拽生成表单(下) 我们的动态表单,最终要实现的效果与Form.io的在线生成表单的效果类似,可以参考它的demo地址:https://codepen.io/travist/full/x ...

  2. 为什么can接口要接通用CAN隔离收发器啊?

    为什么can接口要接通用CAN隔离收发器啊? 主要是为了实现远端接地环路断开的系统,让接口允许在很大的共模电压变化下保证可靠通讯.通常使用CAN通讯的系统,都是要实现远距离可靠通讯,这也恰恰是CAN- ...

  3. 给button增加下划线

    如何给button增加下划线简单版   - (void)setUnderLineForButton:(UIButton *)btn withTitle:(NSString *)title{ //利用富 ...

  4. C到C++的快速教程

    1.头文件: C++头文件不是以.h结尾,C语言中的标准库文件如math,h,stdio.h在C++中被命名为cmath,cstdio 2.命名空间: 为防止名字冲突(出现同名),C++引入名字空间( ...

  5. .NET中Quartz任务调度器的简单应用实例

    1.首先从NuGet中安装Quartz,安装最新版本就OK 2.新建一个Job类实现Quart中的IJob接口用于执行业务逻辑,代码如下: class CheckUpdateJob : IJob { ...

  6. 说说MySQL索引

    前言 关于索引,这是一个非常重要的知识点,同样,在面试的时候也会被经常的问到: 本文描述了索引的结构,介绍了InnoDB的索引方案等知识点,感兴趣的可以看一下: 引入 本文参考文章:MySQL的索引 ...

  7. 2.7 usb摄像头之usb摄像头描述符打印

    学习目标:参考lsusb源码,打印USB摄像头的设备描述符.配置描述符.接口联合描述符.端点描述符: 一.lsusb命令和源码 使用命令lsusb可以看看设备的id,并执行 # lsusb -v -d ...

  8. 【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式

    刚开始接触Verilog HDL语言时,这种硬件描述语言有一点与软件的程序设计语言直观上的最大区别大概就是这个赋值语句了(这里只是强调直观上的最大区别,事实上的最大区别并非如此). Verilog H ...

  9. Linux入门第一天——环境搭建补充内容(xshell与虚拟机等操作)

    一.xShell的安装和使用 前往官网下载一个个人版的 xShell :https://www.netsarang.com/products/xsh_overview.html 要更换免费版的putt ...

  10. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...