Makale numarası: 317799 - Son Gözden Geçirme: 12 Şubat 2007 Pazartesi - Gözden geçirme: 2.1

SORUN: Microsoft Foundation Classes DEBUG_NEW Not çalışma GDI + ile

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

GDI + kullanan bir Microsoft Foundation Classes (MFC) uygulaması <a1>debug</a1> sürümüne oluştururken, aşağıdakine benzer bir hata iletisi alabilirsiniz:
<a1>hata</a1> C2660: 'Yeni Gdiplus::GdiplusBase::operator': işlev 3 parametre almaz

Neden

Hata ayıklama yapılarında MFC iki ek parametre aşırı yüklü Yeni bir işleç Yeni işletmen genişleten Önişlemci makroyu tanımlar. Kaynak dosya adı ve kodu satır numarasını ek parametreleridir. MFC bellek sızıntıları programcının hata ayıklama modunda rapor için bu bilgileri kullanabilirsiniz. MFC ek parametreleri kabul eden aşırı Yeni sağladığından, bu MFC sınıfları için çalışır.

Ancak, bu genişletme tarafından Önişlemci yapıldığından, tüm Yeni işleci kullanımı etkiler. Projede kullanılan herhangi bir olmayan MFC sınıfları, uygun hiçbir aşırı yük, Yeni sınıfın içinde kullanılabilir olsa bile, Yeni bir işletmen da genişletilir. GDI + neler olduğunu ve bunun sonucu olarak, bir derleme hatası iletisi alırsınız.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, aşağıdaki yöntemlerden birini seçin:
  • Kaynak dosyadaki kod bir aşağıdaki satırları yorum oluşturma devre dışı bir Önişlemci genişletme Kapat:
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    						
    Not: Bu yöntem değil kullanmanın olumsuz yanı vardır yardımcı olan özellikleri MFC bellek ayırmalarını ve sızıntılarını izlemek.
  • GDI + ile aşırı işleçler Yeni ve silmek için kabul eder ve ek parametreler atar bazı kod yazarak sağlar. Bu yaklaşım gösterir, aşağıdaki kod yeni bir üstbilgi dosyasına yapıştırın ve Gdiplus.h dosyası yerine yeni üstbilgi dosyası içerir.
    //// 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")
    					

Durum

Bu davranış tasarım yüzündendir.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft GDI+ 1.0
  • Microsoft Windows XP Professional Edition
  • the operating system: Microsoft Windows XP 64-Bit Edition
Anahtar Kelimeler: 
kbmt kbdswgdi2003swept kbprb KB317799 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317799  (http://support.microsoft.com/kb/317799/en-us/ )