error C2660: 'new' : function does not take 3 parameters

转载 2012年03月23日 15:37:18

GDI+

 

NEW 一个image类时 出现如上错误信息

 

  1. Image* pImage=new Image(path);  

 

 

   我的解决方法:直接使用Image类的成员函数FromFile

 

   FromFile的声明如下:

 

   public:static Image^ FromFile( String^ filename);

 

   由此可见 FromFile 是static类型 是属于类的 ,因此可由类直接调用

 

 

  1. Image*  pImage=Image::FromFile(imagepath);  

 

 

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

.........................................................................................................................

 

 

下面是网络上找的一篇发生此情况的原因说明,在此谢谢作者的分析:

 

 

 

问题现象

在我们使用GDI+的时候,如果程序是一个MFC程序,并且是在debug模式下,那我们可能会得到如下的错误信息:

error C2660: 'Gdiplus::GdiplusBase::operator new' : function does not take 3 parameters

原因

在debug模式下,MFC程序要使用一个宏定义来扩展new操作符,使之需要接受两个附加的参数。这两个附加参数分别是源程序的文件名和代码行号。MFC使用它们在debug模式下向程序员报告内存泄漏的信息。MFC类由于重载了new操作符,所以可以正常的与扩展后的new操作符搭配使用。但是,非MFC类则无法与这种扩展的new操作符正常工作。GDI+就属于这种情况。

解决方案

解决方法有如下两种:

一是将代码中如下的一段代码注释掉来关闭预处理命令。

  #ifdef _DEBUG#define new DEBUG_NEW#endif     但是要注意的是,这种方法的缺点是没法使用MFC中可以协助程序员追踪内存分配和内存泄漏问题的功能。

第二种方法是让GDI+也重载new和delete操作符,使其忽略这种附加的操作符。具体操作是将如下代码拷贝到一个头文件中,并在使用GDI+的工程中include这个头文件而不是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")


微软VC各版本BUG: error C2660: 'new' : function does not take 3 parameters

今天在用GDI+写程序时,有HatchBrush * brushDotDiamond = new HatchBrush(HatchStyle25Percent,color);用VC6 SP6或VS20...
  • wangji163163
  • wangji163163
  • 2008年01月11日 09:23
  • 6018

error C2660: 'new' : function does not take 3 parameters

GDI+   NEW 一个image类时 出现如上错误信息   Image* pImage=new Image(path);        我的解决方法:直接使用Image类的成员...
  • shuilan0066
  • shuilan0066
  • 2009年10月28日 14:55
  • 6621

error C2660: ‘Create’ : function does not take 2 parameters

转自VC错误:http://www.vcerror.com/?p=1579 问题描述: 在把VC6.0 工程转到VS2005工程中可能会遇到下面的问题 CDlg *dlg=new CDlg;...
  • swanabin
  • swanabin
  • 2015年07月04日 17:19
  • 1715

关于安装Xtreme ToolkitPro v15.0.1出现error C2660: 'VarCmp' :错误的问题解决

这两天在安装Xtreme ToolkitPro v15.0.1,出现 安装错误 D:\ProgramFiles\CodejockSoftware\MFC\XtremeToolkitProv15.0....
  • zwzy1992
  • zwzy1992
  • 2015年08月18日 14:17
  • 316

'MessageBoxA' : function does not take 1 parameters

程序里面写的是MessageBox(str);但为什么编译时提示出错时MessageBoxA呢?原因是MessageBox实际上有2个原形:MessageBoxA和MessageBoxW#ifdef ...
  • yitaohust
  • yitaohust
  • 2008年10月10日 17:38
  • 15413

'new' : function does not take 3 parameters(部分转载)

VC GDI+: error C2660: 'new' : function does not take 3 parameters 我的方法:直接在new前添加::域作用符号; 以下是在网...
  • qq_23992597
  • qq_23992597
  • 2016年06月02日 16:02
  • 881

error C2660: 'wcscpy_s' : function does not take 2 arguments

_tcscpy_s(m_item.sztype, ITEMTYPE_TEXT);  tptextitem.cpp(119) : error C2660: 'wcscpy_s' : function d...
  • kanguolaikanguolaik
  • kanguolaikanguolaik
  • 2011年05月25日 17:09
  • 4782

error C2660: 'CWnd::HtmlHelpW ' : function does not take 4 arguments

该问题是在VC6.0转VS2005产生的,问题的根源是我们没有加域控制,没有弄清楚要調用CWnd::HtmlHelpW還是要調用api,在前面加上::就可以。比如: ::HtmlHelp(m_hWn...
  • weepingisgood
  • weepingisgood
  • 2012年08月24日 08:46
  • 906

<errors>'MessageBoxA' : function does not take 1 parameter

'MessageBoxA' : does not take 1 parameters原因及解决方法 AfxMessageBox()一般应用于窗体之中,没有窗体,或者是全局函数,不...
  • cs_zlg
  • cs_zlg
  • 2012年10月20日 13:23
  • 1265

VC GDI+: error C2660: 'new' : function does not take 3 parameters

转自VC错误:http://www.vcerror.com/?p=1710 问题描述: 今天在用GDI+写程序时,有 bmp = new Bitmap(L"E:\\1.png"); ...
  • swanabin
  • swanabin
  • 2015年07月16日 14:40
  • 371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:error C2660: 'new' : function does not take 3 parameters
举报原因:
原因补充:

(最多只允许输入30个字)