1、問題描述 原開發環境:Win7 64位旗艦版,VS2010,ThinkPad T460 出現問題:自己開發的MFC程式在WinXP環境下無法正常運行,彈框“無法定位程式輸入點InitializeConditionVariable於動態鏈接庫kernel32.dll” 重新搭建開發環境:WinXP ...
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上也能運行。