首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个工程release编译通过,debug编译通不过解决办法

2012-06-15 
一个工程release编译通过,debug编译通不过新买的盗版《Windows图形编程》袁枫,机械工业出版社第一章的Hello2

一个工程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成功。

热点排行