Как WINVER или WIN32_WINNT влияют на версию операционной системы, как показано в dumpbin - PullRequest
1 голос
/ 30 июня 2009

У нас есть существующая (старая) кодовая строка, которую мы недавно преобразовали из VC6 в VS2008 (в процессе преобразования в VS2005). После нашего преобразования все (или большинство) наших файлов vcproj устанавливают для WINVER значение 0x0500 через настройки препроцессора. В некоторых наших предварительно скомпилированных заголовках (обычно stdafx.h) WINVER установлен в 0x0500 (некоторые все еще устанавливают его в 0x0400). Если я использую dumpbin / headers в нашем основном exe-файле, это показывает, что версия операционной системы - 5.0 (Windows 2000).

После изменения параметров препроцессора vcproj, чтобы WINVER и WIN32_WINNT были 0x0501, и внесения аналогичных изменений в файл stdafx.h и его перестройку, стиль дампа для корзины показывает, что версия операционной системы - 5.0.

Я также создал совершенно новое консольное приложение (а также совершенно новое приложение MFC) с использованием VS2008 и создал их. Эти exe-файлы также показывают версию операционной системы 5.0, хотя WINVER (и WIN32_WINNT), как установлено в файле targetver.h, имеет значение 0x0600.

Я бы предположил, что установка WINVER и / или WIN32_WINNT на 0x0501 или 0x0600 окажет некоторое влияние на версию операционной системы, отображаемую dumpbin. Прав ли я, стоит ли ожидать, что на dumpbin будет показана версия операционной системы, соответствующая WINVER и / или WIN32_WINNT?

Я прочитал несколько хороших статей на эту тему («Использование заголовков Windows» на MSDN, «В чем разница между WINVER ...» на «Старой новой вещи»), и эта особенно интересная: http://blogs.msdn.com/dsvc/archive/2009/06/19/troubleshooting-not-a-valid-win32-application-error-at-the-startup.aspx

Хотя, вероятно, проблема не в том, какая именно версия появляется в поле версии операционной системы, мы хотели бы понять поведение и сделать «правильную» вещь, чтобы убедиться, что мы используем эти макросы и настройки правильно .

Спасибо за любую помощь

1 Ответ

2 голосов
/ 10 ноября 2009

Значение поля «версия операционной системы» устанавливается LINK /SUBSYSTEM.

Кроме того, переключатель LINK / VERSION обновляет поле «версия изображения».

...