Win32工程引用gdiplus.h编译错误解决方案

很多时候我们在VC++中要用到GDI+来画一些东西,要用GDI+的东西,头文件,命名空间,类库这些东西是少不了的。

新建一个Win32工程,在头文件里面加入:

#include <gidplus.h>

using namespace gdiplus;

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

如果直接这样用的话,编译就可能会出现错误,有上百个错误,而且错误显示是在系统文件里面,系统文件里面肯定一般是没有问题,像这种问题一般都是引入的头文件顺序不对或者有什么头文件依赖,遇到这种问题,首先要查看MSDN,看引的头文件是否正确,看到底应该引什么头文件,有没有依赖的头文件等。最后我实在找不到问题所以,就上网查了一下,大致找到了问题所在原因。

一,不stdafx.h头文件的情况。新建的工程,系统默认是会有预编译头文件stdafx.h的,在stdafx.h里面定义了一些常用的头文件,你也可以不让系统引用这个文件,在工程属性中可以设置,如下图所示:


图1 打开工程属性对话框


Win32工程引用gdiplus.h编译错误解决方案_第1张图片

图2 预编译头文件位置



图3 从下拉列表中选择第一项,关闭预编译头文件


二,引stdafx.h头文件的情况,在这种情况下,就必须把这个文件里面的一些东西去掉:

1) 把#define WIN32_LEAN_AND_MEAN宏注释了,这样再加入GDI+相关的东西,就不会出错。

2) 在stdafx.h头文件里加入#include <comdef.h>,这样也可以解决这个问题。

这两种方式者可以解决问题,我觉得第一种可能会好一些,不会引入可能用不到的头文件。原因我会在后面进一步解释。

 

三,关于#define WIN32_LEAN_AND_MEAN宏

MS的解释是// Exclude rarely-used stuff from Windows headers,意思就是说从windows头文件中去掉一些极不常用东西,这样可以加快编译速度。一般包含windows.h要包含一堆用不到的头文件,我估计,有了这句话,它就把windows.h中关于gdiplus.h中要用到的信息就去掉了。

You can reduce the size of the Windows header files by excluding some of the less common API declarations as follows:

     Define WIN32_LEAN_AND_MEAN to exclude APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets. Define one or more of the NOapi symbols to exclude the API. For example, NOCOMM excludes the serial communication API. For a list of support NOapi symbols, see Windows.h.

四,关于<comdef.h>头文件

头文件comdef.h使我们的应用程序能够使用Visual C++中的一些特殊COM支持类。有了这个头文件,gdiplus.h里面有东西就可以用了。


你可能感兴趣的:(Win32工程引用gdiplus.h编译错误解决方案)