[問題] 讓vs編譯出來的MFC視窗程式也可以在Windows XP下執行

作者: red0whale (red whale)   2016-10-13 17:09:40
開發平台(Platform): (Ex: Win10, Linux, ...) Win10
編譯器、IDE:Visual Studio 2015
問題(Question):
 各位好
 我想讓VS編譯出來的MFC視窗程式也可以在Windows XP下執行
 如果我以預設的方式編譯出一個MFC視窗程式
 拿去XP下執行會跳出一個方框:「不是正確的win32」
 於是我上網找了一下解法
 只要在專案上按一下右鍵,
 點選屬性,
 並找到「鏈接器->系統->最低版本」鍵入「5.01」
 就可以解決(?)
 我是參考這個的:http://bbs.csdn.net/topics/390639155
 結果還是沒成功,
 反而出現了另一個方框:「無法找到程序輸入點 InitializeCriticalSectionEx (在動態連結程式庫 kernel32.dll)
 這該怎麼解決?
 問題好像越來越複雜了…
預期的正確結果(Expected Output): 在Windows XP下可以正常開啟並執行
錯誤結果(Wrong Output):
無法找到程序輸入點 InitializeCriticalSectionEx (在動態連結程式庫 kernel32.dll)
補充說明(Supplement):
作者: Schottky (順風相送)   2016-10-13 17:14:00
最簡單的方法是:在虛擬機器裡裝 XP 和 compiler然後在裡面編譯https://goo.gl/Hu76ja (MSDN連結) 這頁看一下你既然想在XP上面跑就得配合刪掉一些XP上不存在的東西像 InitializeCriticalSectionEx() 函式就是一個例子https://goo.gl/JZLVKE (MSDN連結) 這一頁也看一下我只用過 VS2012 沒用過 VS2015,沒辦法幫你試不過原則上就是照 MSDN 說的應該可以那個函數應該是在 MFC library 裡面的目標機器設定正確時應該不會再使用到那個函式才對此外我有點好奇,你為什麼剛學就要碰這麼麻煩的相容問題出現未定義那表示 XP 沒有這些東西所以你要照我的第一個連結 define 那些東西header 裡面才會把不該出現的部份排除通常 MFC 專案是把定義寫在 stdafx.h 裡面即可要寫在所有的 #include 前面才會生效忘了說改完 define 要清除整個專案重新編譯 @@
作者: ilikekotomi (Young)   2016-10-14 01:53:00
有問題的解法希望可以不吝分享
作者: TobyH4cker (Toby (我要當好人))   2016-10-15 04:46:00
3
作者: EdisonX (卡卡獸)   2016-10-16 00:05:00
非得用 VS2015 的 compiler 嗎 ? 若還要相容 XP 的話 ,我比較建議在 VS2015 下,設定以 2010 方式做 compile( 這點是辦得到的唷 , 2015 就真的只變 IDE 而已了 )

Links booklink

Contact Us: admin [ a t ] ucptt.com