You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.5 KiB
167 lines
4.5 KiB
// Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992-1993 Microsoft Corporation,
|
|
// All rights reserved.
|
|
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and Microsoft
|
|
// QuickHelp and/or WinHelp documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// AFXDLLX.H: Extra header for building an MFC Extension DLL
|
|
// This file is really a source file that you should include in the
|
|
// main source file of your DLL.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef _DEBUG
|
|
|
|
#include <stdarg.h>
|
|
|
|
extern "C" void CDECL
|
|
AfxTrace(const char FAR* pszFormat, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, pszFormat);
|
|
|
|
(_AfxGetAppDebug()->lpfnTraceV)(pszFormat, args);
|
|
}
|
|
|
|
extern "C"
|
|
void AFXAPI AfxAssertFailedLine(LPCSTR lpszFileName, int nLine)
|
|
{
|
|
(_AfxGetAppDebug()->lpfnAssertFailed)(lpszFileName, nLine);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Memory allocation is done by app !
|
|
|
|
void* operator new(size_t nSize)
|
|
{
|
|
#ifdef _DEBUG
|
|
ASSERT(_AfxGetAppData()->lpfnAppAlloc != NULL);
|
|
ASSERT(_AfxGetAppDebug()->lpszAllocFileName == NULL);
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
#endif //_DEBUG
|
|
void* p = (_AfxGetAppData()->lpfnAppAlloc)(nSize);
|
|
if (p == NULL)
|
|
AfxThrowMemoryException();
|
|
return p;
|
|
}
|
|
|
|
#ifdef _DEBUG
|
|
void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
|
|
{
|
|
ASSERT(_AfxGetAppData()->lpfnAppAlloc != NULL);
|
|
_AfxGetAppDebug()->lpszAllocFileName = lpszFileName;
|
|
_AfxGetAppDebug()->nAllocLine = nLine;
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
|
|
void* p = (_AfxGetAppData()->lpfnAppAlloc)(nSize);
|
|
|
|
_AfxGetAppDebug()->lpszAllocFileName = NULL;
|
|
|
|
if (p == NULL)
|
|
AfxThrowMemoryException();
|
|
return p;
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
void operator delete(void* pbData)
|
|
{
|
|
if (pbData == NULL)
|
|
return;
|
|
#ifdef _DEBUG
|
|
ASSERT(_AfxGetAppData()->lpfnAppFree != NULL);
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
#endif //_DEBUG
|
|
(*_AfxGetAppData()->lpfnAppFree)(pbData);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Additional CObject new/delete operators for memory tracking
|
|
|
|
#ifdef _DEBUG
|
|
void* CObject::operator new(size_t nSize)
|
|
{
|
|
ASSERT(_AfxGetAppData()->lpfnAppAlloc != NULL);
|
|
ASSERT(_AfxGetAppDebug()->lpszAllocFileName == NULL);
|
|
_AfxGetAppDebug()->bAllocObj = TRUE;
|
|
void* p = (_AfxGetAppData()->lpfnAppAlloc)(nSize);
|
|
if (p == NULL)
|
|
AfxThrowMemoryException();
|
|
return p;
|
|
}
|
|
|
|
void* CObject::operator new(size_t nSize, LPCSTR pFileName, int nLine)
|
|
{
|
|
ASSERT(_AfxGetAppData()->lpfnAppAlloc != NULL);
|
|
_AfxGetAppDebug()->lpszAllocFileName = pFileName;
|
|
_AfxGetAppDebug()->nAllocLine = nLine;
|
|
_AfxGetAppDebug()->bAllocObj = TRUE;
|
|
|
|
void* p = (_AfxGetAppData()->lpfnAppAlloc)(nSize);
|
|
_AfxGetAppDebug()->lpszAllocFileName = NULL;
|
|
if (p == NULL)
|
|
AfxThrowMemoryException();
|
|
return p;
|
|
}
|
|
|
|
void CObject::operator delete(void* pbData)
|
|
{
|
|
if (pbData == NULL)
|
|
return;
|
|
ASSERT(_AfxGetAppData()->lpfnAppFree != NULL);
|
|
_AfxGetAppDebug()->bAllocObj = TRUE;
|
|
(*_AfxGetAppData()->lpfnAppFree)(pbData);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// we must also replace any direct calls to malloc/free
|
|
|
|
extern "C"
|
|
void __far* __cdecl _fmalloc(size_t nSize)
|
|
{
|
|
#ifdef _DEBUG
|
|
ASSERT(_AfxGetAppData()->lpfnAppAlloc != NULL);
|
|
ASSERT(_AfxGetAppDebug()->lpszAllocFileName == NULL);
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
#endif //_DEBUG
|
|
void* p = (_AfxGetAppData()->lpfnAppAlloc)(nSize);
|
|
if (p == NULL)
|
|
AfxThrowMemoryException();
|
|
return p;
|
|
}
|
|
|
|
extern "C"
|
|
void __cdecl _ffree(void __far* p)
|
|
{
|
|
#ifdef _DEBUG
|
|
ASSERT(_AfxGetAppData()->lpfnAppFree != NULL);
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
#endif //_DEBUG
|
|
(*_AfxGetAppData()->lpfnAppFree)(p);
|
|
}
|
|
|
|
extern "C"
|
|
void __far* __cdecl _frealloc(void __far* pOld, size_t nSize)
|
|
{
|
|
#ifdef _DEBUG
|
|
ASSERT(_AfxGetAppData()->lpfnAppReAlloc != NULL);
|
|
_AfxGetAppDebug()->bAllocObj = FALSE;
|
|
#endif //_DEBUG
|
|
return (_AfxGetAppData()->lpfnAppReAlloc)(pOld, nSize);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Also stub out the runtime init 'setenvp' routine to avoid malloc calls
|
|
|
|
extern "C" void _cdecl _setenvp()
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|