Автор темы
Для контроля утечки GDI функций пишу модуль, который подставляет свои функции вместо стандартных из подключаемого модуля. Реализуется это дело путем перехвата API функций. Пример перехвата 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"? Как они импортируют функции из других модулей?