→ Schottky: 最簡單的方法是:在虛擬機器裡裝 XP 和 compiler 10/13 17:14
→ Schottky: 然後在裡面編譯 10/13 17:14
現在VS好像不支援Windows XP了…
※ 編輯: red0whale (114.44.14.194), 10/13/2016 17:17:06
→ Schottky: 你既然想在XP上面跑就得配合刪掉一些XP上不存在的東西 10/13 17:21
→ Schottky: 像 InitializeCriticalSectionEx() 函式就是一個例子 10/13 17:22
不好意思,
請問這個函數怎麼刪除?
要刪好像蠻複雜的…
還有我是新手請多包含
謝謝
※ 編輯: red0whale (114.44.14.194), 10/13/2016 17:28:37
→ Schottky: 我只用過 VS2012 沒用過 VS2015,沒辦法幫你試 10/13 17:29
→ Schottky: 不過原則上就是照 MSDN 說的應該可以 10/13 17:30
→ Schottky: 那個函數應該是在 MFC library 裡面的 10/13 17:31
→ Schottky: 目標機器設定正確時應該不會再使用到那個函式才對 10/13 17:33
→ Schottky: 此外我有點好奇,你為什麼剛學就要碰這麼麻煩的相容問題 10/13 17:34
啊… 忘記跟你講了
我如果將「平台工具組(Platform Toolset)」設成「Visual Studio 2015 – Windows XP (v140_xp)」的話
編譯會出現一堆「未定義」等的錯誤
所以我選的是「Visual Studio 2015 (v140)」
不然選別的都會編譯錯誤
※ 編輯: red0whale (114.44.14.194), 10/13/2016 17:42:04
→ Schottky: 出現未定義那表示 XP 沒有這些東西 10/13 18:04
→ Schottky: 所以你要照我的第一個連結 define 那些東西 10/13 18:05
→ Schottky: header 裡面才會把不該出現的部份排除 10/13 18:06
→ Schottky: 通常 MFC 專案是把定義寫在 stdafx.h 裡面即可 10/13 18:06
→ Schottky: 要寫在所有的 #include 前面才會生效 10/13 18:07
嗯… 還是一樣
以下是我的主程式Source:
(main.cpp)
#define NTDDI_VERSION 0x05010000 //設成Windows XP
#define _WIN32_WINNT 0x0501 //設成Windows XP
#include <afxwin.h>
class MyAPP : public CWinApp {
public:
BOOL InitInstance()
{
CFrameWnd *Frame = new CFrameWnd();
m_pMainWnd = Frame;
Frame->Create(NULL, "Hello MFC");
Frame->ShowWindow(SW_SHOW);
return true;
}
};
MyAPP a_app;
我想印出一個標題為「Hello MFC」的空白視窗
按照您說的第一個連結的define
我把它們的值設成表中的Windows XP
但似乎無效
編譯結果還是出現一堆「未定義」的錯誤
縱使我已經把「平台工具組(Platform Toolset)」設成「Visual Studio 2015 – Windows XP (v140_xp)」了
※ 編輯: red0whale (114.44.14.194), 10/13/2016 18:47:47
剛才試了一下,問題好像解決了
非常感謝您!!
※ 編輯: red0whale (114.44.14.194), 10/13/2016 18:50:59
→ Schottky: 忘了說改完 define 要清除整個專案重新編譯 @@ 10/13 19:08
→ ilikekotomi: 有問題的解法希望可以不吝分享 10/14 01:53
→ TobyH4cker: 3 10/15 04:46
推 EdisonX: 非得用 VS2015 的 compiler 嗎 ? 若還要相容 XP 的話 , 10/16 00:05
→ EdisonX: 我比較建議在 VS2015 下,設定以 2010 方式做 compile 10/16 00:05
→ EdisonX: ( 這點是辦得到的唷 , 2015 就真的只變 IDE 而已了 ) 10/16 00:05