Как определить, является ли приложение программой MFC? - PullRequest
2 голосов
/ 08 октября 2008

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

Ответы [ 9 ]

2 голосов
/ 08 октября 2008

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

1 голос
/ 15 октября 2008

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

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

1 голос
/ 09 октября 2008

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

1 голос
/ 08 октября 2008

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

1 голос
/ 08 октября 2008

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

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

1 голос
/ 08 октября 2008

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

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

0 голосов
/ 22 января 2009

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

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

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

0 голосов
/ 09 октября 2008

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

0 голосов
/ 08 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...