《Windows程序设计》第15章程序15-1,32个错误,17个警告?

fiveyes 2004-01-19 02:26:39
《Windows程序设计(第五版)》,这个程序在书的697页(下册),是一个显示位图的DIB信息的程序,我照着书输入完成后,一编译,发现32个错误,17个警告。我检查了又检查,第一个错误出现的地方是:

BITMAPV5HEADER * pbmih;

对着书检查,并没有什么不同?

错误提示为:

error C2065: 'BITMAPV5HEADER' : undeclared identifier

后面那些错误好象也和这个有关,phmih没能声明,用到它的地方自然就全出错了。

可是我拿鼠标指到"BITMAPV5HEADER"上面,提示为"class BITMAPV5HEADER",那为什么还说未声明呢?

win98,VC6。
...全文
23 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
goneaway1981 2004-01-20
  • 打赏
  • 举报
回复
学习
楼上能不能说说这个"在stdafx.h的头上加#define WINVER 0x0500"是怎么回事??
fiveyes 2004-01-20
  • 打赏
  • 举报
回复
最后我拿出了《Windows程序设计(第五版)》的配书光盘,打开那个源程序,一看…………

那个DIBHEADS.C程序的开头注释底下,第一行赫然写着:

#define WINVER 0x0500

底下才是:

#include <windows.h>

而我的书上却没有这个#define WINVER 0x0500。

我立刻晕倒!!!

忽然想起这个问题还没有结论,赶紧醒过来,在程序中加入这一行,重新编译,错误及警告锐减至2错误1警告,大概扫了一眼,应该属于打字错误,于是连滚带爬赶来结帖。

谢谢keiy()!

呆会儿我就到china-pub给他们发勘误建议去……
柯本 2004-01-20
  • 打赏
  • 举报
回复
1 在wingdi.h中:
#if (WINVER >= 0x0500)
typedef struct {
DWORD bV5Size;
LONG bV5Width;
LONG bV5Height;
WORD bV5Planes;
WORD bV5BitCount;
DWORD bV5Compression;
DWORD bV5SizeImage;
LONG bV5XPelsPerMeter;
LONG bV5YPelsPerMeter;
DWORD bV5ClrUsed;
DWORD bV5ClrImportant;
DWORD bV5RedMask;
DWORD bV5GreenMask;
DWORD bV5BlueMask;
DWORD bV5AlphaMask;
DWORD bV5CSType;
CIEXYZTRIPLE bV5Endpoints;
DWORD bV5GammaRed;
DWORD bV5GammaGreen;
DWORD bV5GammaBlue;
DWORD bV5Intent;
DWORD bV5ProfileData;
DWORD bV5ProfileSize;
DWORD bV5Reserved;
} BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
// Values for bV5CSType
#define PROFILE_LINKED 'LINK'
#define PROFILE_EMBEDDED 'MBED'
#endif
但vc 6.0的WINVER缺省为0x400
在stdafx.h中
#if !defined(AFX_STDAFX_H__2465A029_736C_46CF_9B75_A51F4CDB8DFA__INCLUDED_)
#define AFX_STDAFX_H__2465A029_736C_46CF_9B75_A51F4CDB8DFA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WINVER 0x0500 // 一定要在这里!!!!!!!!!!!!!
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h>
.....
fiveyes 2004-01-20
  • 打赏
  • 举报
回复
加入#include <wingdi.h>了,还是原样的错误与警告没变化。

找到俩stdafx.h文件,一个在mfc/src,另一个在atl/src,全都加了#define WINVER 0X0500,问题依旧。这个是不是指定Windows的版本为5.0啊?可是我用的是Win98。重新编译问题依旧。

忘了说了,我没用MFC,也没用ATL,只是照着书学习基于C的Win32SDK呢。

我再看看是不是有别的地方打字错误造成,如想到什么请一定告知,谢谢!
柯本 2004-01-19
  • 打赏
  • 举报
回复
在stdafx.h的头上加#define WINVER 0x0500
BCB没问题(W2K WINVER=0x0501)
柯本 2004-01-19
  • 打赏
  • 举报
回复
#include <wingdi.h>试试

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧