Как определить, является ли приложение программой MFC?

У меня есть скомпилированное приложение с графическим интерфейсом. Мне нужно узнать, запрограммирован ли он с использованием библиотек MFC. Depends.exe не возвращает зависимости от MFC42*.dll. Есть ли инструмент для получения дополнительной информации об исполняемых файлах? (Если возможно, не только библиотеки, но и используемый компилятор и т. д.)


person Community    schedule 08.10.2008    source источник


Ответы (9)


Также имейте в виду, что приложение MFC могло быть статически связано с библиотеками MFC, а не с использованием общей библиотеки. Статически связанное приложение MFC не будет отображать зависимость от MFCXXX.dll как непосредственную зависимость в Depends.

person RobS    schedule 08.10.2008

Если интересующее вас приложение было динамически связано с MFC, оно будет зависеть от MFCXX.dll, где XX — номер версии. Например, наше приложение зависит от MFC80.dll.

Однако если приложение было статически связано, весь исходный код для MFC будет скомпилирован прямо в приложение.

person Mark Ingram    schedule 08.10.2008
comment
Я уже сказал в вопросе, что он не возвращает никакой зависимости. И я думаю, что приложения MFC можно создавать статически. - person ; 08.10.2008
comment
Нет, если MFC был статически связан с приложением. - person Ferruccio; 08.10.2008

dumpbin — это инструмент, который вам нужен, если он статически связан. Символы MFC, как правило, называются «...Afx...» или «...MFC...», поэтому, если вы их видите, вероятно, используется MFC. Эта утилита также может сообщить вам версию компоновщика, ОС, для которой он скомпилирован, и т. д.

person Nick    schedule 08.10.2008

Если приложение написано с использованием MFC, оно обычно состоит из окон с именами классов, перед которыми стоит строка Afx:.

А если у вас есть доступ к утилите Spy++, очень легко запросить сведения о именах классов любого исполняемого файла.

person jussij    schedule 15.10.2008

Вы можете попробовать запустить утилиту dumpbin для файла (часть SDK или установка VS).

Если вы запустите «dumpbin/exports», вы можете найти любые контрольные MFC-измы. Я не уверен, что они будут, поэтому тест только подтвердит, что MFC статически связан, а не опровергнет это.

person Rob Walker    schedule 08.10.2008

Если вы можете запустить приложение, запустите его, а затем используйте инструмент Sysinternals ProcessExplorer для просмотра загруженных библиотек DLL.

Или вам нужен программный способ определить, использует ли приложение MFC? Кроме того, я немного удивлен, что Depends не показывает то, что вы ожидаете. Сравните вывод Depends с ProcessExplorer и посмотрите, что вы можете узнать.

person John Dyer    schedule 08.10.2008

Вы можете проверить, есть ли какой-либо из стандартных ресурсов MFC находятся в исполняемом файле.

person Mark Ransom    schedule 08.10.2008

Бабак Фаррохи однажды написал очень удобную маленькую программу под названием «Язык 2000», которая сканирует исполняемые файлы в поисках двоичных подписей библиотек и фреймворков. Раньше он обнаруживал статически связанные программы MFC на два пальца выше носа. Хотя программа была уже старой, когда я использовал ее несколько лет назад. Вам нужно будет проверить в Интернете, доступна ли более новая версия или работает ли подпись. Кто знает!

person Serge Wautier    schedule 09.10.2008

Опубликованные зависимости SysInternals (недавно приобретенные Microsoft). Независимо от того, динамически ли он связан с DLL или статически связан, вы увидите ссылки на символы импорта/экспорта (могут быть искажены для сигнатур точки входа C++).

Этот инструмент также чрезвычайно полезен для обнаружения циклических ссылок (с использованием дерева зависимостей). И в тех редких случаях, когда вы абсолютно уверены, что экспортировали точку входа, но компоновщик по-прежнему не работает, вы можете проверить DLL на наличие «отсутствующей» точки входа.

Также помогает в обнаружении скрытых секретов DLL.

person Community    schedule 22.01.2009