在SDK中使用GDI+出现的编译问题解决方法

转自VC错误:http://www.vcerror.com/?p=2008

问题描述:

在MFC中使用GDI+,编译时不会出现什么大的问题,但是SDK中却会报告很多未定义的类型,其中主要是和COM有关的声明.
首先要知道,GDI+是操作系统提供的模块,不和特定的编程语言和库相关联,所以纯净的SDK中是肯定可以使用GDI+的
其次,使用GDI+需要的头文件为GdiPlus.h,对应的lib文件为gdiplus.lib,GDI+被声明进Gdiplus命名空间中,GDI+库需要使用GdiplusStartup进行初始化,使用GdiplusShutdown进行清理(类似socket)。
如果在SDK中使用GDI+的话,做完上述操作之后进行编译,会报告类似如下的编译错误:


1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C2440: “初始化”: 无法从“const char [37]”转换为“int”
1>        没有使该转换得以执行的上下文
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C2146: 语法错误 : 缺少“;”(在标识符“IImageBytes”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C2470: “IImageBytes”: 看起来像函数定义,但没有参数列表;跳过明显的函数体
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(74) : error C2059: 语法错误 : “public”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(280) : error C2146: 语法错误 : 缺少“;”(在标识符“id”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(280) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusimaging.h(280) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(384) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(395) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(405) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(443) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(444) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(445) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(453) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(471) : error C2535: “Gdiplus::Image::Image(void)”: 已经定义或声明成员函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(384) : 参见“Gdiplus::Image::Image”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(505) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(516) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(758) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(813) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(813) : error C2535: “Gdiplus::Metafile::Metafile(void)”: 已经定义或声明成员函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(758) : 参见“Gdiplus::Metafile::Metafile”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(820) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(820) : error C2535: “Gdiplus::Metafile::Metafile(void)”: 已经定义或声明成员函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(758) : 参见“Gdiplus::Metafile::Metafile”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(829) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(829) : error C2535: “Gdiplus::Metafile::Metafile(void)”: 已经定义或声明成员函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(758) : 参见“Gdiplus::Metafile::Metafile”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(855) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(923) : error C2535: “Gdiplus::Metafile::Metafile(void)”: 已经定义或声明成员函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusheaders.h(758) : 参见“Gdiplus::Metafile::Metafile”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : error C2065: “image”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : error C2275: “Gdiplus::GpImage”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgpstubs.h(61) : 参见“Gdiplus::GpImage”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1133) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : error C2065: “image”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : error C2275: “Gdiplus::GpImage”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgpstubs.h(61) : 参见“Gdiplus::GpImage”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1139) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1156) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1244) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1247) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1250) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1262) : error C2061: 语法错误 : 标识符“PROPID”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : error C2065: “bitmap”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : error C2275: “Gdiplus::GpBitmap”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgpstubs.h(62) : 参见“Gdiplus::GpBitmap”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1286) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : error C2065: “bitmap”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : error C2275: “Gdiplus::GpBitmap”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgpstubs.h(62) : 参见“Gdiplus::GpBitmap”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(1292) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2222) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2222) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2224) : error C2065: “header”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2224) : error C2275: “Gdiplus::MetafileHeader”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetaheader.h(112) : 参见“Gdiplus::MetafileHeader”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2224) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2224) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2242) : error C2061: 语法错误 : 标识符“IStream”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : error C2065: “metafile”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : error C2275: “Gdiplus::GpMetafile”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgpstubs.h(63) : 参见“Gdiplus::GpMetafile”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2262) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2309) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2309) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2310) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2310) : error C2146: 语法错误 : 缺少“)”(在标识符“referenceHdc”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2310) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2310) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2310) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2316) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2320) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2320) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2321) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2321) : error C2146: 语法错误 : 缺少“)”(在标识符“referenceHdc”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2321) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2321) : error C2078: 初始值设定项太多
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2321) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusflat.h(2327) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdipluspath.h(133) : error C2061: 语法错误 : 标识符“byte”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(75) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(75) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(76) : error C2448: “Gdiplus::Metafile::{ctor}”: 函数样式初始值设定项类似函数定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(194) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(194) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(195) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(195) : error C2146: 语法错误 : 缺少“)”(在标识符“referenceHdc”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(195) : error C2761: “{ctor}”: 不允许成员函数重新声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(198) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(199) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(199) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(211) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(211) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(212) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(212) : error C2146: 语法错误 : 缺少“)”(在标识符“referenceHdc”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(212) : error C2761: “{ctor}”: 不允许成员函数重新声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(217) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(218) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(218) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(230) : error C2065: “IStream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(230) : error C2065: “stream”: 未声明的标识符
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(231) : error C2275: “HDC”: 将此类型用作表达式非法
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(267) : 参见“HDC”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(231) : error C2146: 语法错误 : 缺少“)”(在标识符“referenceHdc”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(231) : error C2761: “{ctor}”: 不允许成员函数重新声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(236) : error C2059: 语法错误 : “)”
1>c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusmetafile.h(236) : fatal error C1003: 错误计数超过 100;正在停止编译


解决方法:
具体的解决方法参考文章:http://www.vcerror.com/?p=2008
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值