Почему текст "Эта программа не может быть запущена в режиме DOS" присутствует в файлах .dll? - PullRequest
9 голосов
/ 05 апреля 2010

Недавно я открыл файл .dll, созданный Visual Studio 9 при компиляции собственного проекта DLL C ++, и был удивлен, увидев текст «Эту программу нельзя запустить в режиме DOS» в самом начале.

Почему этот текст содержится в файлах .dll?

Ответы [ 3 ]

8 голосов
/ 05 апреля 2010

DLL очень похож на исполняемый файл с другим расширением. Текст, который вы видели, является частью «стандартного» исполняемого заголовка на окнах. Он (был) использован для изящного прекращения попытки запуска исполняемого файла Windows из DOS.

3 голосов
/ 03 июня 2014

В спецификации формата Portable Executable указано следующее:

Заглушка MS-DOS является допустимым приложением, которое работает под MS-DOS. это размещен в передней части образа EXE. Компоновщик размещает заглушку по умолчанию здесь, который печатает сообщение «Эта программа не может быть запущена в DOS режим. », когда образ запускается в MS-DOS. Пользователь может указать другой заглушки с помощью параметра компоновщика / STUB.

В местоположении 0x3c заглушка имеет смещение файла к подписи PE. Эта информация позволяет Windows правильно выполнить файл образа, хотя у него есть заглушка MS-DOS. Это смещение файла помещается в местоположение 0x3c во время соединения.

1 голос
/ 05 апреля 2010

Программы Win32, запускаемые из режима DOS (т. Е. Однопользовательский, без графики), печатают этот текст. Библиотеки DLL, вероятно, тоже напечатают это сообщение, если вы попытаетесь использовать их без запуска Windows.

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