作者red0whale (red whale)
看板C_and_CPP
标题[问题] 让vs编译出来的MFC视窗程式也可以在Windows XP下执行
时间Thu Oct 13 17:09:40 2016
开发平台(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):
--
欢迎各位使用以下网站服务:
http://redwh.al/ (短网址服务)
http://i.redwh.al/ (图片即时上传服务)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.44.14.194
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1476349785.A.3AC.html
1F:→ Schottky: 最简单的方法是:在虚拟机器里装 XP 和 compiler 10/13 17:14
2F:→ Schottky: 然後在里面编译 10/13 17:14
现在VS好像不支援Windows XP了…
※ 编辑: red0whale (114.44.14.194), 10/13/2016 17:17:06
4F:→ Schottky: 你既然想在XP上面跑就得配合删掉一些XP上不存在的东西 10/13 17:21
5F:→ Schottky: 像 InitializeCriticalSectionEx() 函式就是一个例子 10/13 17:22
不好意思,
请问这个函数怎麽删除?
要删好像蛮复杂的…
还有我是新手请多包含
谢谢
※ 编辑: red0whale (114.44.14.194), 10/13/2016 17:28:37
7F:→ Schottky: 我只用过 VS2012 没用过 VS2015,没办法帮你试 10/13 17:29
8F:→ Schottky: 不过原则上就是照 MSDN 说的应该可以 10/13 17:30
9F:→ Schottky: 那个函数应该是在 MFC library 里面的 10/13 17:31
10F:→ Schottky: 目标机器设定正确时应该不会再使用到那个函式才对 10/13 17:33
11F:→ 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
12F:→ Schottky: 出现未定义那表示 XP 没有这些东西 10/13 18:04
13F:→ Schottky: 所以你要照我的第一个连结 define 那些东西 10/13 18:05
14F:→ Schottky: header 里面才会把不该出现的部份排除 10/13 18:06
15F:→ Schottky: 通常 MFC 专案是把定义写在 stdafx.h 里面即可 10/13 18:06
16F:→ 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
17F:→ Schottky: 忘了说改完 define 要清除整个专案重新编译 @@ 10/13 19:08
18F:→ ilikekotomi: 有问题的解法希望可以不吝分享 10/14 01:53
19F:→ TobyH4cker: 3 10/15 04:46
20F:推 EdisonX: 非得用 VS2015 的 compiler 吗 ? 若还要相容 XP 的话 , 10/16 00:05
21F:→ EdisonX: 我比较建议在 VS2015 下,设定以 2010 方式做 compile 10/16 00:05
22F:→ EdisonX: ( 这点是办得到的唷 , 2015 就真的只变 IDE 而已了 ) 10/16 00:05