tuxiaodi13
tuxiaodi13
采纳率50%
2015-04-02 03:55

使用VC++建立一个CDib类库 但无法生成 代码与错误如下 求指导

/*声明*/
#ifndef _CDIB_H
#define _CDIB_H
class CDib :public CObject{ //父类为CObject
public:
RGBQUAD*m_pRGB;
BYTE*m_pData;
UINT m_numberOfColors;
BOOL m_valid;
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER *m_pBitmapInfoHeader;
BITMAPINFO *m_pBitmapInfo;
BYTE *pDib;
DWORD size;
public:
CDib();
~CDib();
char m_fileName[256];
char *GetFileName();
BOOL IsValid();
DWORD GetSize();
UNIT GetHight();
UINT GetNumberOfColors();
RGBQUAD *GetRGB();
BYTE *GetData();
BITMAPINFO *GetInfo();
WORD PaletteSize(LPBYTE lpDIB);
WORD DIBNumColors(LPBYTE lpDIB);
void SaveFile(const CString filename);
public();
void LoadFile(const char*dibFileName);
}

#include "Stdafx.h"
#include "CDib.h"

#include "windowsx.h"
CDib::CDib(){
size=0;
}
CDib::~CDib(){
GlobalFreePtr(m_pBitmapInfo);
}
void CDib::LoadFile(const char*dibFileName){
strcpy(m_fileName,dibFileName);
CFile dibFile(m_fileName,CFile::modeRead);
dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));
if(bitmapFileHeader.bfType== ox4d42;){
DWORD fileLength=dibFile.GetLength();
size=fileLength-sizeof(BITMAPFILEHEADER);
pDib=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,size);
dibFile.Read((void*)pDib,size);
dibFile.Close();

    m_pBitmapInfo=(BITMAPINF0*)pDib;
    m_pBitmapInfoHeader=(BITMAPINFOHEADER*)pDib;
    m_pRGB=(RGBQUAD*)(pDib+m_pBitmapInfoHeader->biSize);
    int m_numberOfColors=GetNumberOfColors();
    if(m_pBitmapInfoHeader->biClrUsed==0)
        m_pBitmapInfoHeader->biClrUsed=m_numberOfColors;
    DWORD colorTableSize=m_numberOfColors*sizeof(RGBQUAD);
    m_pData=pDib+m_pBitmapInfoHeader->biSize+colorTableSize;
    if(m_pRGB==(RGBQUAD*)m_pData)
        m_pRGB=NULL;
    m_pBitmapInfoHeader->biSizeImage=GetSize();
    m_valid=TRUE;
}
else{
    m_valid=FALSE;
    AfxMessageBox("This isn't a bitmap file!");

}

}
BOOL CDib::IsValid(){
return m_valid;
}
char *CDib::GetFileName(){
return m_fileName;
}
UINT CDib::GetWidth(){
return(UINT)m_pBitmapInfoHeader->biWidth;
}
UINT CDib::GetHeight(){
return(UINT)m_pBitmapInfoHeader->biHeight;
}
UINT CDib::GetSize(){
if(m_pbitmapInfoHeader->biSizeImage!=0)
return m_pBitmapInfoHeader->biSizeImage;
else{
DWORD height=(DWORD)GetHeight();
DWORD width=(DWORD)GetWidth();
return height*width;
}
}

UNIT CDib::GetNumberOfColors(){
int numberOfColors;
if((m_pBitmapInfoHeader->biClrUsed==0)&&(m_pBitmapInfoHeader->biBitCount switch(m_pBitmapInfoHeader->biBitCount){
case1:
numberOfColors=2;
break;
case4:
numberOfColors=16;
break;
case8:
numberOfColors=256;
}
}else{
numberOfColors=(int)m_pBitmapInfoHeader->biClrUsed;
}
return numberOfColors;
}

BYTE*CDib::GetData(){
return m_pData;
}

RGBQUAD*CDib::GetRGB(){
return m_pRGB;
}

BITMAPINFO*CDib::GetInfo(){
return m_pBitmapInfo;
}

WORD CDib::PaletteSize(LPBYTE lpDIB){
return (DIBNumColors(lpDIB)*sizeof(RGBTRIPLE);
}

WORD CDib::DIBNumColors(LPBYTE lpDIB){
WORD wBitCount;
wBitCount=((LPBITMAPCOREHEADER)lpDIB)->bcBitCount;
switch(wBitCount){
case1:
return 2;
case4;
return 16;
case8:
return 256;
default:
return 0;
}
}

void CDib::SaveFile(const CString filename){
stcpy(m_fileName,filename);
CFile dibFile(m_fileName,CFile::modeCreate|CFile::modeWrite);
dibFile.Write((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));
dibFile.Write((void*)pDib,size);
dibFile.Close();
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • 91program 91program 6年前

    所需要的父类 CObject 的定义没有,看看是不是少了什么头文件。在 MFC 中,CObject 是在头文件 afx.h 中,可以包含来试试。
    cdib2\cdib2\cdib.h 有包含头文件吗,都包含了哪些?

    点赞 评论 复制链接分享
  • oyljerry oyljerry 6年前

    需要包含你用到的一些定义的头文件

    点赞 评论 复制链接分享
  • tuxiaodi13 tuxiaodi13 6年前

    1>------ 已启动全部重新生成: 项目: CDib, 配置: Debug Win32 ------
    1>生成启动时间为 2015/4/2 11:37:45。
    1>_PrepareForClean:
    1> 正在删除文件“Debug\CDib.lastbuildstate”。
    1>InitializeBuildStatus:
    1> 正在对“Debug\CDib.unsuccessfulbuild”执行 Touch 任务。
    1>GenerateTargetFrameworkMonikerAttribute:
    1>正在跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件而言都是最新的。
    1>ClCompile:
    1> Stdafx.cpp
    1> CDib.cpp
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(4): error C2504: “CObject”: 未定义基类
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(6): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(6): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(6): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(7): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(7): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(7): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(8): error C2146: 语法错误: 缺少“;”(在标识符“m_numberOfColors”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(8): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(8): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(9): error C2146: 语法错误: 缺少“;”(在标识符“m_valid”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(9): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(9): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(10): error C2146: 语法错误: 缺少“;”(在标识符“bitmapFileHeader”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(10): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(10): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(11): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(11): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(11): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(12): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(12): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(12): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(13): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(13): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(13): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(14): error C2146: 语法错误: 缺少“;”(在标识符“size”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(14): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(20): error C2146: 语法错误: 缺少“;”(在标识符“IsValid”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(20): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(20): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(20): warning C4183: “IsValid”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(21): error C2146: 语法错误: 缺少“;”(在标识符“GetSize”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(21): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(21): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(21): warning C4183: “GetSize”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(22): error C2146: 语法错误: 缺少“;”(在标识符“GetHight”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(22): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(22): warning C4183: “GetHight”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(23): error C2146: 语法错误: 缺少“;”(在标识符“GetNumberOfColors”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(23): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(23): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(23): warning C4183: “GetNumberOfColors”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(24): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(24): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(24): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(24): warning C4183: “GetRGB”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(25): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(25): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(25): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(25): warning C4183: “GetData”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(26): error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(26): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(26): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(26): warning C4183: “GetInfo”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(27): error C2146: 语法错误: 缺少“;”(在标识符“PaletteSize”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(27): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(27): error C2061: 语法错误: 标识符“LPBYTE”
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(27): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(27): warning C4183: “PaletteSize”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(28): error C2146: 语法错误: 缺少“;”(在标识符“DIBNumColors”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(28): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(28): error C2061: 语法错误: 标识符“LPBYTE”
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(28): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(28): warning C4183: “DIBNumColors”: 缺少返回类型;假定为返回“int”的成员函数
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(29): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(29): error C2146: 语法错误: 缺少“,”(在标识符“filename”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(30): error C2143: 语法错误 : 缺少“:”(在“(”的前面)
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(30): error C2059: 语法错误:“)”
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(30): error C2238: 意外的标记位于“;”之前
    1>d:\vc2010\user file\cdib2\cdib2\CDib.h(35): fatal error C1070: 文件“d:\vc2010\user file\cdib2\cdib2\cdib.h”中的 #if/#endif 对不匹配
    1> AssemblyInfo.cpp
    1> 正在生成代码...
    1>
    1>生成失败。
    1>
    1>已用时间 00:00:06.84
    ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

    点赞 评论 复制链接分享