K
klizardin
Для контроля утечки GDI функций пишу модуль, который подставляет свои функции вместо стандартных из подключаемого модуля. Реализуется это дело путем перехвата API функций.
Проблема возникла в том, что я не могу перехватывать функции из MFC42.dll так как в нем не находиться секции ".idata", а именно в ней прописанны функции для импорта.
Я перехватываю часть функций, которые inline /*программа пишется на С++*/, но реализованные внутри MFC42.dll до них я не могу добраться.
Изночальная проблема: длл-ка падает под win98 при скролировании области отрисовки документа. Т.к. из-за сложности модуля, да и не родного происхождения (не я его писал, да и автор не все свое использовал) очень тяжелоо искать в коде что неверно. Легче попробовать автоматизированные средства. Bounds checker ничего не выдал. Беглый просмотр кода нашел один нюанс.
возможно существуют и другие подобные нюансы. На этот нюанс BoundsChecker ни как не реагировал.
Как найти неправильное использование GDI объектов? Есть ли утилиты для этого преднозначенные?
Если самому писать, то как быть с дллками типа MFC42.dll где нет секции ".idata"? Как они импортируют функции из других модулей?
Ссылка скрыта от гостей
Проблема возникла в том, что я не могу перехватывать функции из 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"? Как они импортируют функции из других модулей?