gdiplus gdiplusbase operator new 函数不接受 3 个参数(错误及修正方法)

在使用 GDI + 的 Microsoft 基础类 (MFC) 应用程序的调试版本时, 可能会出现类似于以下内容的错误消息: 
错误 C2660: Gdiplus::GdiplusBase::operator new: 函数不带三个参数

 

      原因:在调试版本中 MFC 定义扩展到带有两个额外的参数的重载 new 运算符的 new 运算符的预处理器宏。额外的参数是源文件名称和代码行号。

      MFC 可以使用此信息对程...在调试版本中 MFC 定义扩展到带有两个额外的参数的重载 new 运算符的 new 运算符的预处理器宏。额外的参数是源文件名称和代码行号。MFC 可以使用此信息对程序员在调试模式下时报告内存泄漏。这适用于 MFC 类因为 MFC 提供的 new 接受额外的参数的重载的不同而不同。

但是,此扩展由预处理器来完成,因为它会影响所有使用 new 运算符。如果在项目中使用了任何非 MFC 类,其 new 运算符是也即使没有合适的重载,new 的可用在该类中扩展。这是发生在 GDI + 中,如此一来,您收到一个编译时错误消息。

 

要变通解决此问题,选择下列方法之一: 
1、通过注释掉以下行在源文件中的代码关闭预处理器扩展: 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif     

注: 此方法具有不使用的缺点在 MFC 中功能的信息,这些功能可帮助您跟踪内存分配和泄漏。

2、GDI + 使用重载为提供 new 的和 delete 运算符通过编写一些代码,可接受,并丢弃其他参数。您可以将下面的代码演示了这种方法,粘贴到一个新的头文件,并包括新的头文件,而不是 Gdiplus.h 文件 
Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files.

#define iterator _iterator

#ifdef _DEBUG

namespace Gdiplus
{
namespace DllExports
{
   #include <GdiplusMem.h>
};

#ifndef _GDIPLUSBASE_H
#define _GDIPLUSBASE_H
class GdiplusBase
{
   public:
    void (operator delete)(void* in_pVoid)
    {
     DllExports::GdipFree(in_pVoid);
    }

    void* (operator new)(size_t in_size)
    {
     return DllExports::GdipAlloc(in_size);
    }

    void (operator delete[])(void* in_pVoid)
    {
     DllExports::GdipFree(in_pVoid);
    }

    void* (operator new[])(size_t in_size)
    {
     return DllExports::GdipAlloc(in_size);
    }

    void * (operator new)(size_t nSize, LPCSTR lpszFileName, int nLine)
    {
     return DllExports::GdipAlloc(nSize);
    }

    void operator delete(void* p, LPCSTR lpszFileName, int nLine)
    {
     DllExports::GdipFree(p);
    }

   };
#endif // #ifndef _GDIPLUSBASE_H
}
#endif // #ifdef _DEBUG

#include <gdiplus.h>
#undef iterator
Ensure that Gdiplus.lib is linked.
#pragma comment(lib, "gdiplus.lib")

 

微软官方原文地址如下:
http://support.microsoft.com/kb/317799/

转载于:https://www.cnblogs.com/myitm/archive/2011/08/23/2150255.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值