一个工程release编译通过,debug编译通不过
新买的盗版《Windows图形编程》袁枫,机械工业出版社
第一章的Hello2程序,我新建的win32Application工程,按照书上的代码一字不差的敲进去,奇怪的事情发生了,release通过了,debug却通不过,这是怎么回事?
我以为是settings配置不对,于是把每一项都仔细看了一遍,有不一样的地方便修改的和源码一样还是编译通不过!
又试了win32 console application 和win32 dll,更不行了。
我知道一般 区分vc工程是看settings下link页的配置,/subsystem:后面跟的字符串代表了运行环境:
windows: win32 Application
console: win32 Console Application
dll没有subsystem选项,但是有/dll字符串。
无奈,又回过头来仔细看书。
书上有句话是这么说的:
如果你的程序跟hello1.cpp一样简单,可以选择使用DLL版的C执行库,编写自己的WinMainCRTStartup实现程序,并让编译器/链接器产生真正小的二进制代码。
思考下还是没有头绪。
下面贴出源代码,求教各位CSDN的牛人们给予一点帮助,不胜感激!
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <assert.h>
void CenterText(HDC hdc, int x, int y, LPCTSTR szFace,
LPCTSTR szMsg, int point)
{
HFONT hFont = CreateFont(-point * GetDeviceCaps(hdc, LOGPIXELSY) / 72,
0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE,
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, VARIABLE_PITCH, szFace);
assert(hFont);
HGDIOBJ hOld = SelectObject(hdc, hFont);
SetTextAlign(hdc, TA_CENTER | TA_BASELINE);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(0, 0, 0xff));
TextOut(hdc, x, y, szMsg, _tcslen(szMsg));
SelectObject(hdc, hOld);
DeleteObject(hFont);
}
const TCHAR szMsg[]= _T("Hello, world");
const TCHAR szFace[]= _T("Times New Roman");
#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-align:512")
extern "C" void WinMainCRTStartup()
{
HDC hdc = GetDC(NULL);
assert(hdc);
CenterText(hdc, GetSystemMetrics(SM_CXSCREEN) / 2,
GetSystemMetrics(SM_CYSCREEN) / 2,
szFace, szMsg, 72);
ReleaseDC(NULL, hdc);
ExitProcess(0);
}
[解决办法]
/subsystem:
应该指定windows
另外,指定入口函数为WinMainCRTStartup
[解决办法]
连接器的命令行参数加上/ENTRY:WinMainCRTStartup,即可Build成功。