Есть вот такой код:
//------------------
ID=199;
for(int i=0;ID<206;i++,ID++)
{
m_parBmp[i]=new CBitmap();
m_parBmp[i]=GetSkin().LoadCBitmap(MAKEINTRESOURCE(ID));
}
MessageBox("loaded");
ID=199;
for(int i=0;ID<206;i++,ID++)
{
delete m_parBmp[i];
}
MessageBox("Unloaded");
//--------------------------
В это время смотрел на использование памяти приложением, получается вот что:
— Пока мы не загрузили эти битмапки память под приложение находится на каком-то уровне скажем 1200 кб и кол-во GDI обьектов скажем 150
— после работы куска этого кода до первого месседж бокса — после его появления кол-во GDI обьектов увеличивается и выделяемая память соотв. тоже — стает 2000 кб и 158 GDI обьектов
После появления второго мессаджбокса смотрим.. и видим что кол-во GDI обьектов приняло старое значение — 150 а кол-во памяти не поменялось — осталось 2000 кб и в течении 20 мин не выгружалась!
Вопрос: как сделать так чтоб выгрузить всё-таки из памяти приложения эти ресурсы если они не используются???
31.01.07 18:26: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, 0x8000FFFF, Вы писали:
FFF>MSDN:
FFF>You can use the CGdiObject::DeleteObject function to delete a bitmap loaded by the LoadBitmap function, or the CBitmap destructor deletes the object for you.
FFF>Before you delete the object, make sure it is not selected into a device context.
Я тоже читал MSDN

удалял и через DeleteObject ничего не меняется- ситуация остается такая же...
Кстати еще раз глянул в исходники CBitmap
afxwin.h
class CBitmap : public CGdiObject
{
DECLARE_DYNAMIC(CBitmap)
public:
static CBitmap* PASCAL FromHandle(HBITMAP hBitmap);
// Constructors
CBitmap();
BOOL LoadBitmap(LPCTSTR lpszResourceName);
BOOL LoadBitmap(UINT nIDResource);
BOOL LoadOEMBitmap(UINT nIDBitmap); // for OBM_/OCR_/OIC_
BOOL LoadMappedBitmap(UINT nIDBitmap, UINT nFlags = 0,
LPCOLORMAP lpColorMap = NULL, int nMapSize = 0);
BOOL CreateBitmap(int nWidth, int nHeight, UINT nPlanes, UINT nBitcount,
const void* lpBits);
BOOL CreateBitmapIndirect(LPBITMAP lpBitmap);
BOOL CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight);
BOOL CreateDiscardableBitmap(CDC* pDC, int nWidth, int nHeight);
// Attributes
operator HBITMAP() const;
int GetBitmap(BITMAP* pBitMap);
// Operations
DWORD SetBitmapBits(DWORD dwCount, const void* lpBits);
DWORD GetBitmapBits(DWORD dwCount, LPVOID lpBits) const;
CSize SetBitmapDimension(int nWidth, int nHeight);
CSize GetBitmapDimension() const;
// Implementation
public:
virtual ~CBitmap();
#ifdef _DEBUG
virtual void Dump(CDumpContext& dc) const;
#endif
};
afxwin1.inl
_AFXWIN_INLINE CBitmap::~CBitmap()
{ }
afxwin1.inl
_AFXWIN_INLINE CGdiObject::~CGdiObject()
{ DeleteObject(); }
Вроде все хорошо... должно удаляться
Погоди... не посмотрел код внимательно....
ID=199;
for(int i=0;ID<206;i++,ID++)
{
m_parBmp[i]=new CBitmap();
m_parBmp[i]=GetSkin().LoadCBitmap(MAKEINTRESOURCE(ID));
}
А это еще что такое... CBitmap создал.... сразу заменил его другим...
а потом удаляешь уже другой....