VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库

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
  • 高票回答中的代码可能并不能解决问题,第二个答案中,答主贴了自己的一篇博客 https://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html 希望对你萌有所启发,反正是启发到我了(∩_∩)
  • 对于我的程序,我定位到出问题的地方是托盘,托盘涉及到的东西比较底层。现在我把托盘功能注释后可以再WinXP上运行了,接下来看看能否对托盘进行兼容处理,使之在XP上也能运行。
时间: 2024-10-22 00:38:21

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

【转】VS2010下MFC的串口编程

串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据:当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据:当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序.作为一个程序员,要编写通信程序,只需知道通

VS2010下MFC的串口编程

串口通信简介 一般来说,计算机都有一个或多个串行端口,这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当解释器的角色.当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据:当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据:当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序.作为一个程序员,要编写通信程序,只需知道通

VS2010的MFC对话框程序中添加菜单栏的过程

VS2010的MFC对话框程序中添加菜单栏的过程 最近在看一个用MFC写的界面的项目的代码,在代码和界面中一直没有看到关于菜单控件是如何添加进对话框的,于是就百度了下.结果,与其它控件(Button等)添加的方式不一样: VS2010的MFC对话框程序中添加菜单栏的过程大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在左边目录的任意位置上,先右键-->选择Insert Resource(插入资源)选项,在弹出的对话框中选择Menu以后,

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

程序运行提示错误"无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上",网上查了说是opengl的.lib和.dll版本过低,所有替换了.lib和.dll为最新的,但运行后提示有连接错误,不过再把glut.h头文件也换成对应新的头文件就Ok了. 所有, .lib 和 .dll 和 glut.h 都要同时更换为最新.

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

windows系统,使用mingw32-g++编译一个简单的工程,编译链接过程都没有错误提示,但是运行的时候会弹出提示框提示"无法定位程序输入点__gxx_personality_v0" 在我这里是因为系统的环境变量的目录中有几个版本不同的libstdc++-6.dll. 一个解决方案是使用 -static 选项编译工程. 另一个解决方案是 删除掉其他含有libstdc++-6.dll 的PATH环境变量,只留下mingw的.

使用VS2010写下的第一个程序

用VS2010写下的第一个程序 安装 下载 Microsoft Visual Studio 2010 中文旗舰版: 下载 Microsoft Visual Studio 2010 中文旗舰版 SP1升级包: 使用精灵虚拟光驱(Daemon Tools)来安装,安装之前先关闭防护软件,如360或QQ管家等等. 步骤如下: 打开VS2010,点击文件:→新建→项目[快捷键:Crtl+Shift+N]; 点击Win32→Win32控制台应用程序→名称(输入项目名称如:CProject),点击确定: 点

Linux 使用core file文件快速定位程序崩溃代码行

问题描述 如果在 Linux下编写程序,有时运行程序的时候程序崩溃,比如说只有"Segmentation fault (core dumped) ",程序比较小的话,还可以一行一行查看,但是如果程序很庞大,一行行查询,效率非常低下.Linux下可以程序可以生成core file文件,借助gdb很快能定位到崩溃的代码行. 解决方案 测试程序,除零操作,程序会崩溃 /* test.c */ #include <stdio.h> #include <stdlib.h>

无法定位程序输入点 Can&#39;t load package

---------------------------Toggle Form/Unit (F12): bcb.exe - 无法找到入口--------------------------- 无法定位程序输入点 @[email protected]$qqrv 于动态链接库 d:\program files (x86)\borland\cbuilder6\Projects\Bpl\lookup.bpl 上. Can't load package d:\program files (x86)\borl

无法定位程序输入点 CreateUri 于动态链接库 urlmon.dll 上。

笔记本换成XP系统后,打开风行的时候,回报下面的错误: --------------------------- Msg: FunshionWeb.exe - 无法找到入口 --------------------------- 无法定位程序输入点 CreateUri 于动态链接库 urlmon.dll 上. --------------------------- 确定 --------------------------- 解决方法: 打开开始--运行 输入msconfig回车 打开启动选项卡