Re[3]: ATL и утечки памяти
От: Admiral Украина  
Дата: 01.04.02 10:21
Оценка: 12 (2)
Здравствуйте Андрей, Вы писали:

А>А при чем здесь windows.h

Не знаю.

А>он у меня явно нигде не включается. Я на ATL пишу, а не на чистом API.


У меня тоже ATL-проект, никакого windows.h мне не требовалось. Просто я подключил сначала atldbgmem.h — увидел ошибки, а потом интуиция сработала.

В общем, попробуй, если получится — может у тебя найдется объяснение такого поведения ATL. Ну, а не получится — тогда я лажанулся.
ATL и утечки памяти
От: Андрей Россия  
Дата: 01.04.02 02:32
Оценка:
Привет!

Есть тут кто-нибудь, кто знает как побороть ATL в VS.NET? Проблема в том, что в ATL7.0 появилось новое средство поиска утечек памяти в ATL-проектах. Сидит вся эта беда в atldbgmem.h. Но при подключении данного файла в stdafx.h и попытке собрать проект компилятор выдает кучу ошибок в atlapp.h:

d:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\atlwin.h(4454): error C2065: 'lpDevMode' : undeclared identifier
d:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\atlwin.h(4454): error C2065: 'LPDEVMODEOLE' : undeclared identifier
d:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\atlwin.h(4454): error C2146: syntax error : missing ';' before identifier 'lpDevMode'
d:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\atlwin.h(4462): error C2440: '=' : cannot convert from ''unknown-type'' to ''unknown-type''
d:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include\atlwin.h(4469): error C2065: 'DEVMODEOLE2T' : undeclared identifier

Звери LPDEVMODEOLE и DEVMODEOLE2T определяются в этом же файле (atlwin.h), но при включенном макросе _WINGDI_, если же определить этот макрос в stdafx.h, то компилятор вообще с ума сходит.

Поможите, please, если можете.
Re: ATL и утечки памяти
От: Admiral Украина  
Дата: 01.04.02 09:40
Оценка:
Здравствуйте Андрей, Вы писали:

Попробуй в самое начало stdafx.h заинклудить windows.h. У меня вроде вылечило.

Удачи!
Re[2]: ATL и утечки памяти
От: Андрей Россия  
Дата: 01.04.02 09:46
Оценка:
Здравствуйте Admiral, Вы писали:

A>Здравствуйте Андрей, Вы писали:


A>Попробуй в самое начало stdafx.h заинклудить windows.h. У меня вроде вылечило.


A>Удачи!


А при чем здесь windows.h, он у меня явно нигде не включается. Я на ATL пишу, а не на чистом API.
Re[4]: ATL и утечки памяти
От: Андрей Россия  
Дата: 01.04.02 10:37
Оценка:
Здравствуйте Admiral, Вы писали:

skip

A>В общем, попробуй, если получится — может у тебя найдется объяснение такого поведения ATL. Ну, а не получится — тогда я лажанулся.


Спасибо! Я тебя сначала неправильно понял, извини. Действительно, очень странная связь. Кстати, теперь мне придется от STL избавляться — не хочет она с этой самой atldbgmem.h дружить
Re[5]: ATL и утечки памяти
От: Admiral Украина  
Дата: 01.04.02 11:51
Оценка:
Здравствуйте Андрей, Вы писали:

А>Спасибо! Я тебя сначала неправильно понял, извини.

Ничего, бывает

Кстати, а где можно почитать про atldbgmem, как им пользоваться и т.п.? С виду — мощная штука, а увидел только сегодня.
Заранее благодарен.
Re[6]: ATL и утечки памяти
От: Андрей Россия  
Дата: 01.04.02 13:59
Оценка:
Здравствуйте Admiral, Вы писали:

skip

A>Кстати, а где можно почитать про atldbgmem, как им пользоваться и т.п.? С виду — мощная штука, а увидел только сегодня.

A>Заранее благодарен.

В том и проблема, что нигде ничего путнего нет, по крайней мере, я не нашел Но, в принципе, все в ATL можно изучить по исходникам, и данную фичу тоже. Кстати, если будешь копать, как ей пользоваться — можно будет исследование опубликовать здесь же, на сайте.
Re: ATL и утечки памяти
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.04.02 20:20
Оценка:
Здравствуйте Андрей, Вы писали:

АА>Есть тут кто-нибудь, кто знает как побороть ATL в VS.NET?


Мы в последней версии ascLib (лежит пока только на CD) сделали свою проверку памяти. Она мощьнее чем в ATL и CRT (например, ловит утечки BSTR-ингов) и работает с обоими версиями ATL (3 и 7). Может тебе это подойдет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ATL и утечки памяти
От: Андрей Россия  
Дата: 02.04.02 02:18
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте Андрей, Вы писали:


АА>>Есть тут кто-нибудь, кто знает как побороть ATL в VS.NET?


VD>Мы в последней версии ascLib (лежит пока только на CD) сделали свою проверку памяти. Она мощьнее чем в ATL и CRT (например, ловит утечки BSTR-ингов) и работает с обоими версиями ATL (3 и 7). Может тебе это подойдет?


Попробую, может быть, подойдет
Re[5]: ATL и утечки памяти
От: ury0005  
Дата: 06.03.09 16:49
Оценка:
Есть способ совместить STL и atldbgmem.h. Немножко геморойно, но лучше чем ничего.
Нужно перед подключением STL файлов убивать переопределение оператора 'new' и восстанавливать его по завершению подключения STL. Пример:

// подключаем дебагер памяти
#include <windows.h>
#include <atldbgmem.h>

// перед подключением <map> прячем дебагер памяти
#ifdef new
    #undef new
#endif

// собственно подключаем STL
#include <map>
#include <vector>
#include <set>

// восстанавливаем трассировку выделения памяти
#ifdef __ATLDBGMEM_H__
    #ifndef new
        #define new new(__FILE__, __LINE__)
    #endif    
#endif



Фокусы с отключением и включением дебагера я прячу в отдельные H файлы, которые подключаю перед и после STL.

А>Спасибо! Я тебя сначала неправильно понял, извини. Действительно, очень странная связь. Кстати, теперь мне придется от STL избавляться — не хочет она с этой самой atldbgmem.h дружить
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.