当前位置:C++技术网 > 资讯 > 利用GDI+实现水印(3)

利用GDI+实现水印(3)

更新时间:2015-10-03 17:10:09浏览次数:1+次

接着前篇,当我们一切就绪后,点击运行,你会发现有这样的问题:
1> WaterPictureDlg.cpp
1>d:\dev\vcdemo\waterpicture\waterpicture\waterpicturedlg.cpp(208): error C2660: “Gdiplus::GdiplusBase::operator new”: 函数不接受 3 个参数
1>d:\dev\vcdemo\waterpicture\waterpicture\waterpicturedlg.cpp(209): error C2660: “Gdiplus::GdiplusBase::operator new”: 函数不接受 3 个参数

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

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

那这是怎么来的呢?看图说话:

看到箭头那了吗?new操作符语句里有几个参数?这就是问题来源。那怎么解决呢?

直接注释掉下面的几行就行了!

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

不过我只注释了第二行,看看我的:

 

好了最后看下我们的结果吧!