GDI+库编译报错

开发平台: vs2010

程序类型: win32应用程序

问题背景:一个完好的程序,加入下列几行代码之后就会编译报错:

#include 
#pragma comment(lib, "gdiplus.lib")

而且报的是系统文件里面的错误,让人摸不着头脑。如图:

GDI+库编译报错_第1张图片

回想起之前在实习的时候也遇到过类似的错误,那这到底是怎么一回事呢?

按照 http://blog.sina.com.cn/s/blog_5f8817250100f5o6.html 的网友提到的其中一种解决方法,将stdafx.h中新建时自动添加的某个宏去掉即可:

//#define WIN32_LEAN_AND_MEAN             //  从Windows 头文件中排除极少使用的信息

那么,这是为什么呢?百度一下,引用

http://blog.csdn.net/q191201771/article/details/6332828 网友的解答:

在许多windows下的项目中, 我们经常可以看到在stdafx.h中有这么个宏定义#define WIN32_LEAN_AND_MEAN, 它的作用实际上是当我们项目中包含了时去除一些头文件的包含, 加快编译速度, 大家可以跳进中搜索一下WIN32_LEAN_AND_MEAN就能看到去除了哪些头文件的包含了, 据网上说是不使用MFC时可以包含该预处理头,

windows.h头文件中,确实有这样的一个条件宏判断是否include某一系列头文件:

#ifndef WIN32_LEAN_AND_MEAN
#include 
#include 
#include 
#include 
#ifndef _MAC
#include 
#include 
#include 
#include 
#endif
#include 
#ifndef _MAC
#include 
#include 
#endif
#ifndef NOCRYPT
#include 
#include 
#include 
#endif

#ifndef NOGDI
#ifndef _MAC
#include 
#ifdef INC_OLE1
#include 
#else
#include 
#endif /* !INC_OLE1 */
#endif /* !MAC */
#include 
#endif /* !NOGDI */
#endif /* WIN32_LEAN_AND_MEAN */

那么我就有点好奇了,GDI+是属于MFC专有的吗?我之前白痴地以为,windows API用的图形设备的API就是GDI,然后GDI+用的就是MFC。看起来似乎不是那么简单的,《MFC windows程序设计》中的MFC也是叫做使用的GDI的。那么GDI+和MFC有什么关系呢?

对于之前的GDI+库编译报错的问题,还有一种解决方法,就是在include GDI+头文件之前加入代码:

那么我就有点好奇了,GDI+是属于MFC专有的吗?我之前白痴地以为,windows API用的图形设备的API就是GDI,然后GDI+用的就是MFC。看起来似乎不是那么简单的,《MFC windows程序设计》中的MFC也是叫做使用的GDI的。那么GDI+和MFC有什么关系呢?

对于之前的GDI+库编译报错的问题,还有一种解决方法,就是在include GDI+头文件之前加入代码:

#include 

其实我们看看windows.h头文件中的WIN32_LEAN_AND_MEAN宏下面include了一个头文件可以猜想应该是GDI+使用必须有com的定义,那么新问题来了,COM是什么?

根据百度上的解释,COM(组件对象模型是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。

————给人的感觉就是像是一个API,又像是一个dll吧。

不过更重要的是,它是一个MS-DOS可执行文件。(对于我们这种90后,还是对DOS比较陌生的。)

com也是一种文件类型:

其实我们看看windows.h头文件中的WIN32_LEAN_AND_MEAN宏下面include了一个头文件可以猜想应该是GDI+使用必须有com的定义,那么新问题来了,COM是什么?

根据百度上的解释,COM(组件对象模型是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。

————给人的感觉就是像是一个API,又像是一个dll吧。

不过更重要的是,它是一个MS-DOS可执行文件。(对于我们这种90后,还是对DOS比较陌生的。)

com也是一种文件类型:

打开tree.com:

GDI+库编译报错_第2张图片

打开tree.com:

GDI+库编译报错_第3张图片

就会直接运行,就和exe文件类似吧。用记事本打开也只是一堆二进制乱码。

由于手头工作优先级的问题,COM的学习先放着,如果后续有时间和精力的话再整整。






你可能感兴趣的:(windows程序设计)