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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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
虽然只有两个答案,但都是精华。

参考链接:
⾼票回答中的代码可能并不能解决问题,第⼆个答案中,答主贴了⾃⼰的⼀篇希望对你萌有所启发,反正是启发到我了(∩_∩)对于我的程序,我定位到出问题的地⽅是托盘,托盘涉及到的东西⽐较底层。

现在我把托盘功能注释后可以再WinXP上运⾏了,接下来看看能否对托盘进⾏兼容处理,使之在XP上也能运⾏。

4、后续
WinXP是⽀持托盘图标的,之所以出错,是因为NOTIFYICONDATA结构也是不断更新升级的。

原实现托盘的代码如下:
1//设置托盘图标
2 m_notify.cbSize=sizeof NOTIFYICONDATA;
3 m_notify.hWnd=this->m_hWnd;
4 m_notify.uID=IDR_MAINFRAME;
5 m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
6 strcpy(m_notify.szTip,"XML解析程序");
7 m_notify.uCallbackMessage=WM_USER_NOTIFYICON;
8 m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; //⽣成托盘
9 Shell_NotifyIcon(NIM_ADD,&m_notify);
其中第⼆⾏ cbSize的赋值在WinXP环境下应改为:
m_notify.cbSize=sizeof NOTIFYICONDATA_V3_SIZE;
具体原因,参考:
以上。

相关文档
最新文档