Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему ругаеться на Win32 
:(
    Опции темы
Nuzur
Дата 23.2.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Код


#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0400)
#error this code uses features only available in Windows 98/NT4 or later
#endif    // _WIN32_WINNT



хотя в свойставх проекта стоит win32 smile


--------------------
Never again...
PM MAIL   Вверх
CaptainFlint
Дата 23.2.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Цитата(Nuzur @ 23.2.2006, 15:39 Найти цитируемый пост)
хотя в свойставх проекта стоит win32

Нужно в stdafx.h определить константу препроцессора _WIN32_WINNT и задать ей значение не меньше 0x0400.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Nuzur
Дата 23.2.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Я так уже и сделал и порсвоил ей 0хФФФФ, но почему такая муть ваще возникает...
Я не мог подключить wincrypt.h и другие вещи и все ПлЕвались и аргументировали мол не там винда иди гуляй.
Пользуюсь Visual C++ 6.0


--------------------
Never again...
PM MAIL   Вверх
CaptainFlint
Дата 23.2.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Правильно аргументировали. Среда рассчитана на создание более-менее переносимых программ, а не таких, которые будут запускаться исключительно на той машине, где их скомпиляли. А эти константы как раз и определяют, на какую винду должен быть рассчитан полученный EXE-шник. Функции из файла, о котором идёт речь в первом посте, присутствуют только в виндах 98/NT4 и более новых (о чём и сообщает текст ошибки). Соответственно, задавая константу 0x0400 ты как бы говоришь: "Да, я согласен с тем, что моя программа не будет запускаться под Win95 и NT3.x".


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Nuzur
Дата 24.2.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Конечно вопрос философский, но почему майкрософт не сделала это все явно.
Почему нужно лезть в stdafx и там руцями набирать...
Суть вопросв как это сделать явно?

Цитата

Среда рассчитана на создание более-менее переносимых программ, а не таких, которые будут запускаться исключительно на той машине....



по-илему вы не правы. Поскольку в свойствах проекта стоит win32 то как то странно что такая порграмма может быть расчитана на Win 3.11 или что-то вроде того, если мне не изменяет(что вполне вероятно) память, то там было 16-ть разрядиков и все.


--------------------
Never again...
PM MAIL   Вверх
CaptainFlint
Дата 24.2.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: 7
Всего: 23



Цитата(Nuzur @ 24.2.2006, 10:36 Найти цитируемый пост)
Конечно вопрос философский, но почему майкрософт не сделала это все явно.
Почему нужно лезть в stdafx и там руцями набирать...
Суть вопросв как это сделать явно?

А это разве не явно? Куда уж явнее-то? smile Прямо пишешь: хочу совместимости с WinNT версии не ниже 4.0 (если 0x0400), или версии 5.0 aka Win2000 (если пишешь 0x0500) и т.д.
Единственное возможное улучшение, которое я себе представляю, - явно указывать в свойствах проекта не Win32, а саму версию винды: Win95, Win98, WinNT4, Win2000 и т.д. Но что делать с более новыми виндами, вышедшими после того, как была создана сама студия?

Вот, VC++ 6 была выпущена в 98-м году. Соответственно, она просто физически не может знать ничего о виндах 98SE, ME, 2000, XP, 2003 Server, Vista. И для них всё равно придётся вручную писать номер версии.

Цитата(Nuzur @ 24.2.2006, 10:36 Найти цитируемый пост)
Поскольку в свойствах проекта стоит win32 то как то странно что такая порграмма может быть расчитана на Win 3.11 или что-то вроде того, если мне не изменяет(что вполне вероятно) память, то там было 16-ть разрядиков и все.

Стоп-стоп-стоп, при чём тут 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, не находите? smile Поэтому и ввели эти дополнительные константы, поясняющие, с какой конкретно версией требуется совместимость (и с более поздними, разумеется).

Вот, простейший пример. Скажем, в XP появились визуальные стили оформления. И хочется сделать программу, которая будет их активно использовать (т.е. не просто манифест подключать, а свои контролы создавать). В любом случае все эти навороты не будут работать на Win2000 и ниже. Более того, если не предпринять специальных мер (а точнее - реализовать отложенную загрузку DLL), на Win2000 такая программа даже не запустится, ибо нет там необходимых библиотек и функций. Поэтому при компиляции такой программы VC++ честно сообщает: не существует таких полностью переносимых функций как, скажем, IsThemeActive. Потому что определение этой функции закрыто соответствующей директивой. И если всё же эту функцию хочется использовать в ущерб совместимости (т.е. когда соглашаешься: да, я знаю, что на старых виндах поддержки тем не существует, и не хочу, чтобы моя программа там работала), то указываешь #define _WIN_NT 0x0510 - теперь компилятор нормально подключит все хедеры и библиотеки, и программа нормально скомпилируется. Но запускаться будет только на XP и выше.
Или хочется, чтобы всё это происходило автоматически, и программа всегда компилировалась, никак не сообщая, что под Win2000 она принципиально не запустится? Чтобы об этом сообщил не компилятор, а недовольный заказчик? Побойтесь Бога! smile

PS: Примечание для особо въедливых: я знаю, что можно написать программу, чтобы она работала сразу и под 2000, и под XP, используя стили в последнем, и не используя их в первом. То, что сказано выше - лишь пример.


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.