From 241421a60d9e3046dd48340de9cdca12713186fb Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Wed, 9 Feb 2005 21:36:10 +0000 Subject: [PATCH 1/1] Applied patch [ 1113624 ] MSW DLL requires global new/delete ops inline git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31880 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/memory.h | 45 +++++++++++++++++++++++++++++++++++++++---- src/common/memory.cpp | 4 +++- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/include/wx/memory.h b/include/wx/memory.h index 41ef650f98..017a51f056 100644 --- a/include/wx/memory.h +++ b/include/wx/memory.h @@ -42,9 +42,7 @@ WXDLLIMPEXP_BASE void wxDebugFree(void * buf, bool isVect = false); // We'll only do malloc and free for the moment: leave the interesting // stuff for the wxObject versions. -// devik 2000-8-29: All new/delete ops are now inline because they can't -// be marked as dllexport/dllimport. It then leads to weird bugs when -// used on MSW as DLL + #if wxUSE_GLOBAL_MEMORY_OPERATORS @@ -70,6 +68,44 @@ WXDLLIMPEXP_BASE void wxDebugFree(void * buf, bool isVect = false); #define wxUSE_ARRAY_MEMORY_OPERATORS 0 #endif +// devik 2000-8-29: All new/delete ops are now inline because they can't +// be marked as dllexport/dllimport. It then leads to weird bugs when +// used on MSW as DLL +#if defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) +inline void * operator new (size_t size, wxChar * fileName, int lineNum) +{ + return wxDebugAlloc(size, fileName, lineNum, FALSE, FALSE); +} + +inline void * operator new (size_t size) +{ + return wxDebugAlloc(size, NULL, 0, FALSE); +} + +inline void operator delete (void * buf) +{ + wxDebugFree(buf, FALSE); +} + +#if wxUSE_ARRAY_MEMORY_OPERATORS +inline void * operator new[] (size_t size) +{ + return wxDebugAlloc(size, NULL, 0, FALSE, TRUE); +} + +inline void * operator new[] (size_t size, wxChar * fileName, int lineNum) +{ + return wxDebugAlloc(size, fileName, lineNum, FALSE, TRUE); +} + +inline void operator delete[] (void * buf) +{ + wxDebugFree(buf, TRUE); +} +#endif // wxUSE_ARRAY_MEMORY_OPERATORS + +#else + void * operator new (size_t size, wxChar * fileName, int lineNum); void * operator new (size_t size); @@ -82,7 +118,8 @@ void * operator new[] (size_t size); void * operator new[] (size_t size, wxChar * fileName, int lineNum); void operator delete[] (void * buf); -#endif +#endif // wxUSE_ARRAY_MEMORY_OPERATORS +#endif // defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE)) // VC++ 6.0 and MWERKS #if ( defined(__VISUALC__) && (__VISUALC__ >= 1200) ) || defined(__MWERKS__) diff --git a/src/common/memory.cpp b/src/common/memory.cpp index 18b7e30a68..90812da1f1 100644 --- a/src/common/memory.cpp +++ b/src/common/memory.cpp @@ -917,6 +917,7 @@ static MemoryCriticalSection memLocker; #endif +#if !(defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) #ifdef __WXDEBUG__ #if wxUSE_GLOBAL_MEMORY_OPERATORS void * operator new (size_t size, wxChar * fileName, int lineNum) @@ -949,7 +950,8 @@ void operator delete[] (void * buf) { wxDebugFree(buf, true); } -#endif +#endif // wxUSE_ARRAY_MEMORY_OPERATORS +#endif // !(defined(__WXMSW__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL_BASE))) #endif // wxUSE_GLOBAL_MEMORY_OPERATORS // TODO: store whether this is a vector or not. -- 2.47.2