![]() |
|
|
![]()
|
|
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
хотя в свойставх проекта стоит win32 -------------------- Never again... |
|||
|
||||
| CaptainFlint |
|
|||
|
Искатель сокровищ ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 26.2.2003 Где: Москва Репутация: 7 Всего: 23 |
Нужно в stdafx.h определить константу препроцессора _WIN32_WINNT и задать ей значение не меньше 0x0400. -------------------- Почему же, ё-моё, ты нигде не пишешь "ё"? -------------------- Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Я так уже и сделал и порсвоил ей 0хФФФФ, но почему такая муть ваще возникает...
Я не мог подключить wincrypt.h и другие вещи и все ПлЕвались и аргументировали мол не там винда иди гуляй. Пользуюсь Visual C++ 6.0 -------------------- Never again... |
|||
|
||||
| CaptainFlint |
|
|||
|
Искатель сокровищ ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 26.2.2003 Где: Москва Репутация: 7 Всего: 23 |
Правильно аргументировали. Среда рассчитана на создание более-менее переносимых программ, а не таких, которые будут запускаться исключительно на той машине, где их скомпиляли. А эти константы как раз и определяют, на какую винду должен быть рассчитан полученный EXE-шник. Функции из файла, о котором идёт речь в первом посте, присутствуют только в виндах 98/NT4 и более новых (о чём и сообщает текст ошибки). Соответственно, задавая константу 0x0400 ты как бы говоришь: "Да, я согласен с тем, что моя программа не будет запускаться под Win95 и NT3.x".
-------------------- Почему же, ё-моё, ты нигде не пишешь "ё"? -------------------- Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Конечно вопрос философский, но почему майкрософт не сделала это все явно.
Почему нужно лезть в stdafx и там руцями набирать... Суть вопросв как это сделать явно?
по-илему вы не правы. Поскольку в свойствах проекта стоит win32 то как то странно что такая порграмма может быть расчитана на Win 3.11 или что-то вроде того, если мне не изменяет(что вполне вероятно) память, то там было 16-ть разрядиков и все. -------------------- Never again... |
|||
|
||||
| CaptainFlint |
|
|||
|
Искатель сокровищ ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 26.2.2003 Где: Москва Репутация: 7 Всего: 23 |
А это разве не явно? Куда уж явнее-то? Единственное возможное улучшение, которое я себе представляю, - явно указывать в свойствах проекта не Win32, а саму версию винды: Win95, Win98, WinNT4, Win2000 и т.д. Но что делать с более новыми виндами, вышедшими после того, как была создана сама студия? Вот, VC++ 6 была выпущена в 98-м году. Соответственно, она просто физически не может знать ничего о виндах 98SE, ME, 2000, XP, 2003 Server, Vista. И для них всё равно придётся вручную писать номер версии. Стоп-стоп-стоп, при чём тут Win3.11? Речь не о ней! (Не путать Win3.x и WinNT3.x!) Совершенно верно, Win3.x были 16-разрядными. Но в свойствах проекта стоит Win32, так что Win3.x отсекается сразу же, остаются только 32-битные версии. А сколько этих 32-битных-то разных вышло, а? Линейка 9x - Win95, 98, 98 SE, ME (возможно, 98SE от 98 не отличается по функциям, но проверять номер версии лень), линейка NT - WinNT 3.51, 4.0, Win2000, WinXP, Win2003 Server, теперь вот - Win Vista выходит... Итого 10 разных версий. Многовато для одного бедного Win32, не находите? Вот, простейший пример. Скажем, в XP появились визуальные стили оформления. И хочется сделать программу, которая будет их активно использовать (т.е. не просто манифест подключать, а свои контролы создавать). В любом случае все эти навороты не будут работать на Win2000 и ниже. Более того, если не предпринять специальных мер (а точнее - реализовать отложенную загрузку DLL), на Win2000 такая программа даже не запустится, ибо нет там необходимых библиотек и функций. Поэтому при компиляции такой программы VC++ честно сообщает: не существует таких полностью переносимых функций как, скажем, IsThemeActive. Потому что определение этой функции закрыто соответствующей директивой. И если всё же эту функцию хочется использовать в ущерб совместимости (т.е. когда соглашаешься: да, я знаю, что на старых виндах поддержки тем не существует, и не хочу, чтобы моя программа там работала), то указываешь #define _WIN_NT 0x0510 - теперь компилятор нормально подключит все хедеры и библиотеки, и программа нормально скомпилируется. Но запускаться будет только на XP и выше. Или хочется, чтобы всё это происходило автоматически, и программа всегда компилировалась, никак не сообщая, что под Win2000 она принципиально не запустится? Чтобы об этом сообщил не компилятор, а недовольный заказчик? Побойтесь Бога! PS: Примечание для особо въедливых: я знаю, что можно написать программу, чтобы она работала сразу и под 2000, и под XP, используя стили в последнем, и не используя их в первом. То, что сказано выше - лишь пример. -------------------- Почему же, ё-моё, ты нигде не пишешь "ё"? -------------------- Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |