GDI+新建画刷时出现new错误问题

今天用IMageEx来向窗口显示动画,用到了GDI+;结果遇到了

    error C2660: “Gdiplus::GdiplusBase::operator new”: 函数不接受 3 个参数       这个编译错误!

    

    上网查了看一个网友说的是:

     

找到解决方案,原来是微软的 DEBUG_NEW  和 GDI+ 不匹配造成的。

完整的解决方案地址:http://support.microsoft.com/kb/317799/

这里贴出官方文档:

      (1)原因:

在调试版本中 MFC 定义扩展到带有两个额外的参数的重载  运算符的 new 运算符的预处理器宏。额外的参数是源文件名称和代码行号。MFC 可以使用此信息对程序员在调试模式下时报告内存泄漏。这适用于 MFC 类因为 MFC 提供的  接受额外的参数的重载的不同而不同。
但是,此扩展由预处理器来完成,因为它会影响所有使用 new 运算符。如果在项目中使用了任何非 MFC 类,其 new 运算符是也即使没有合适的重载, 的可用在该类中扩展。这是发生在 GDI + 中,如此一来,您收到一个编译时错误消息。

(2)解决方法

  方法一:通过注释掉以下行在源文件中的代码关闭预处理器扩展:

[cpp]  view plain copy
  1. #ifdef _DEBUG  
  2. #define new DEBUG_NEW  
  3. #endif  
: 此方法具有不使用的缺点在 MFC 中功能的信息,这些功能可帮助您跟踪内存分配和泄漏。

方法二:

GDI + 使用重载为提供 新 的和 删除 运算符通过编写一些代码,可接受,并丢弃其他参数。您可以将下面的代码演示了这种方法,粘贴到一个新的头文件,并包括新的头文件,而不是 Gdiplus.h 文件

[cpp]  view plain copy
  1.  Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files.  
  2.   
  3. #define iterator _iterator  
  4.   
  5. #ifdef _DEBUG  
  6.   
  7. namespace Gdiplus  
  8. {  
  9.     namespace DllExports  
  10.     {  
  11.         #include <GdiplusMem.h>  
  12.     };  
  13.   
  14.     #ifndef _GDIPLUSBASE_H  
  15.     #define _GDIPLUSBASE_H  
  16.     class GdiplusBase  
  17.     {  
  18.         public:  
  19.             void (operator delete)(void* in_pVoid)  
  20.             {  
  21.                 DllExports::GdipFree(in_pVoid);  
  22.             }  
  23.   
  24.             void* (operator new)(size_t in_size)  
  25.             {  
  26.                 return DllExports::GdipAlloc(in_size);  
  27.             }  
  28.   
  29.             void (operator delete[])(void* in_pVoid)  
  30.             {  
  31.                 DllExports::GdipFree(in_pVoid);  
  32.             }  
  33.   
  34.             void* (operator new[])(size_t in_size)  
  35.             {  
  36.                 return DllExports::GdipAlloc(in_size);  
  37.             }  
  38.   
  39.             void * (operator new)(size_t nSize, LPCSTR lpszFileName, int nLine)  
  40.             {  
  41.                 return DllExports::GdipAlloc(nSize);  
  42.             }  
  43.   
  44.             void operator delete(void* p, LPCSTR lpszFileName, int nLine)  
  45.             {  
  46.                 DllExports::GdipFree(p);  
  47.             }  
  48.   
  49.         };  
  50.     #endif // #ifndef _GDIPLUSBASE_H  
  51. }  
  52. #endif // #ifdef _DEBUG  
  53.   
  54. #include <gdiplus.h>  
  55. #undef iterator  
  56.  Ensure that Gdiplus.lib is linked.  
  57. #pragma comment(lib, "gdiplus.lib")  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值