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
This commit is contained in:
@@ -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__)
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user