Здравствуйте! Этот вопрос наверное будет слишком глупо звучать даже для новичка. То ли руки у меня кривоваты, то ли еще что, но никак не могу зацепить выход из OpenDialog (в нотации Delphi) Прога большая, а мне нужно найти момент, когда прога получает имя файла из опендиалога и начинает его перепахивать. Пользую OLLYDBG, вроде очень неплохой отладчик, но все-равно не могу никак. Может есть статейка для таких как я, либо отладчик, который сам может останавливаться на подобных событиях, либо на худой конец дезасм, который хоть немного описывал вызываемые функции, хоть по именам? Спасибо за понимание
Дык всётаки OpenDialog в Delphi или GetOpenFileName в WinAPI. Какую из функций ты используешь? В Delphi используй события, а для WinAPI (GetOpenFileName) OPENFILENAME.lpfnHook
Пардон, прога написана на VC6-м, так что, конечно, GetOpenFileName. Хотя, как добраться до OPENFILENAME.lpfnHook в дебугере, я тоже не понимаю Если конкретизируете, буду крайне благодарен. На самом деле, задачка примитивная: есть такая штука, как PCAD2002 и у него есть два формата файлов: бинарный и ASCII. Так вот в ASCII он жутко свинячит: встречая буковку 'я' (0xFF) незамедлительно начинает считать ее концом файла со всеми вытекающими последствиями. Вот я и хочу ее полечить, а ломал я в последний раз ДОС-овскую (!!!) программу, да и то, скорее на интуиции.
В GetOpenFileName при вызове передаётся адрес структуры OPENFILENAME. Последний перед вызовом GetOpenFileName push ... запихивает в стек адрес этой структуры. В структуре есть поле OPENFILENAME.lpstrFile - указатель на буфер для принятия имени выбраного файла. По смещению 28 байт от начала структуры сидит дворд lpstrFile - этот дворд и есть адрес буфера, заполняемого ф-цией. Поставь в Оле бряк на доступ к этому адресу памяти. Когда код попытается записать, считать или модифицировать содержимое буфера, Оля остановится на этом коде.