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. MVC view操作(Razor语法)

    Razor,很有意思的剃刀.相较与之前开发WEB的方式,Razor真是轻松惬意. 下面说一下我使用Razor的一些心得. 页面中归根结底是一个输出字符串(HTML CSS JS等混合的字符串)的过程. ...

  2. bat批处理文件自动判断系统版本信息(转载)

    @echo offver|find "Version 5.0" >nulif not errorlevel 1 goto Windows2Kver|find "版本 ...

  3. 学习JavaSE 数组

    一维数组 基本概念 1.数组中只允许放同一种类型(可以是父子关系). 2.数组即对象. 例: int[ ] arrs={0,1,2};//arrs即一个对象. 3.数组是定长的,不可以增加或者减少. ...

  4. block本质探寻五之atuto类型局部实例对象

    说明:阅读本文章,请参考之前的block文章加以理解: 一.栈区block分析 //代码 //ARC void test1() { { Person *per = [[Person alloc] in ...

  5. devise的使用

    ~ 在gemfile中加入 gem 'devise' ~ 终端输入 $ bundle install $ rails generate devise:install ~ 确保登录之后能正常跳转 在co ...

  6. PostgreSQL timeline

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 关于timeline,有如下的说法 http ...

  7. cogs1885 [WC2006]水管局长数据加强版

    BZOJ卡不过灰常蛋疼(毕竟人蠢自带巨大常数 这和动态维护最小生成树很像,但加边变成了删边,似乎没法做了. 然后根据之前的套路离线做,删边变成加边,就可以做了orz 二分查找的:(慢 // It is ...

  8. CentOS 7.X 关闭SELinux

    1.查看 [root@dev-server ~]# getenforce Disabled [root@dev-server ~]# /usr/sbin/sestatus -v SELinux sta ...

  9. Error:(1, 1) java: 非法字符: ‘\ufeff’

    一.问题 用IDEA打开eclipse java项目编译时,出现以下错误: Error:(1, 1) java: 非法字符: '\ufeff' Error:(1, 10) java: 需要class, ...

  10. python中偏函数的应用

    一.什么是偏函数? (1)在Python的functools模块众多的功能中,其中有一个就是偏函数,我们称之为 partial function 模块的概念我们下一篇在细讲. (2)我们都听过偏将军吧 ...