ОБСУЖДЕНИЕ

Контроль утечек при выполнении Gdi функций

1 ответов 4,5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Для контроля утечки GDI функций пишу модуль, который подставляет свои функции вместо стандартных из подключаемого модуля. Реализуется это дело путем перехвата API функций. Пример перехвата API функций

Проблема возникла в том, что я не могу перехватывать функции из MFC42.dll так как в нем не находиться секции ".idata", а именно в ней прописанны функции для импорта.
Я перехватываю часть функций, которые inline /*программа пишется на С++*/, но реализованные внутри MFC42.dll до них я не могу добраться.

Изночальная проблема: длл-ка падает под win98 при скролировании области отрисовки документа. Т.к. из-за сложности модуля, да и не родного происхождения (не я его писал, да и автор не все свое использовал) очень тяжелоо искать в коде что неверно. Легче попробовать автоматизированные средства. Bounds checker ничего не выдал. Беглый просмотр кода нашел один нюанс.

Код:
//что то вроде
...
CPen pen;
pen.CreatePen(...)
CPen* poldpen = pDC->SelectObject(&pen);
poldpen->DeleteObject();
...
//естественно далее в этом месте никакого SelectObject "вернуть обратно" не вызывается
//да и в дальнейшем коде сомнительно, что нечто подобное происходит

возможно существуют и другие подобные нюансы. На этот нюанс BoundsChecker ни как не реагировал.

Как найти неправильное использование GDI объектов? Есть ли утилиты для этого преднозначенные?
Если самому писать, то как быть с дллками типа MFC42.dll где нет секции ".idata"? Как они импортируют функции из других модулей?
 
Если проблема еще актуальна, скинь часть кода, где отваливается. Попробую помочь.
 
Статус
Закрыто для дальнейших ответов.