VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
1、問題描述
原開發(fā)環(huán)境:Win7 64位旗艦版,VS2010,ThinkPad T460
出現(xiàn)問題:自己開發(fā)的MFC程序在WinXP環(huán)境下無法正常運行,彈框“無法定位程序輸入點InitializeConditionVariable于動態(tài)鏈接庫kernel32.dll”
重新搭建開發(fā)環(huán)境:WinXP SP3 專業(yè)版,VS2010,GIGABYTE某motherboard(原諒辦公室沒別的空閑主機了)
問題依舊存在:重新編譯通過,但運行時還是彈框“無法定位程序輸入點InitializeConditionVariable于動態(tài)鏈接庫kernel32.dll”,我在程序入口下的斷點,都沒有執(zhí)行到。
2、原因
? (1)如果并不是自己開發(fā)的程序:一般就是不兼容,但也有可能是別的原因。
? (2)如果想讓自己開發(fā)的程序在WinXP系統(tǒng)上兼容:不要低估微軟,更不要高估寄幾。一般沒有別的亂七八糟的原因,只是因為WinXP系統(tǒng)的kernel32.dll中并沒有InitializeConditionVariable。之前在Win7上開發(fā)的時候,你或者MFC程序調用了kernel32.dll中的InitializeConditionVariable,所以在XP上根本運行不了。一般是多線程處理不當造成的。
3、解決方法
? (1)如果并不是自己開發(fā)的程序:想要嘗試解決的話,請參照百度出來的方法,但是一定要提前準備好WinPE系統(tǒng)(U盤啟動盤),并且對原kernel32.dll文件進行備份!因為替換kernel32.dll文件極有可能使你的操作系統(tǒng)開不開機。
? (2)如果想讓自己開發(fā)的程序在WinXP系統(tǒng)上兼容:
- 最好在WinXP上搭建開發(fā)環(huán)境,再調試代碼。
- 最好直接Google,中文資料質量一般。不要問我怎么知道的o(≧口≦)o
- 雖然只有兩個答案,但都是精華。 參考鏈接:http://stackoverflow.com/questions/2847960/procedure-entry-point-initializeconditionvariable-could-not-be-located-in-kernel
- 高票回答中的代碼可能并不能解決問題,第二個答案中,答主貼了自己的一篇博客 希望對你萌有所啟發(fā),反正是啟發(fā)到我了(∩_∩)
- 對于我的程序,我定位到出問題的地方是托盤,托盤涉及到的東西比較底層。現(xiàn)在我把托盤功能注釋后可以再WinXP上運行了,接下來看看能否對托盤進行兼容處理,使之在XP上也能運行。
4、后續(xù)
? WinXP是支持托盤圖標的,之所以出錯,是因為NOTIFYICONDATA結構也是不斷更新升級的。原實現(xiàn)托盤的代碼如下:
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環(huán)境下應改為:
m_notify.cbSize=sizeof NOTIFYICONDATA_V3_SIZE;具體原因,參考:http://blog.csdn.net/kvs112219/article/details/6069936
以上。
轉載于:https://www.cnblogs.com/JJJanepp/p/6346662.html
總結
以上是生活随笔為你收集整理的VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php start
- 下一篇: Java Streams,第 4 部分: