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

使用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条回答 默认 最新

  • tuxiaodi13 2015-04-02 03:56
    关注

    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 个 ==========

    评论

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3