Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > У меня - VS.net2003, у заказчика - Win95


Автор: Dreamer_0x01 9.9.2005, 00:26
Работаю под VisualStudio.NET 2003, пишу с использованием MFC, использую только самые элементарные компоненты и контролы, то есть ничего стороннего...
Заказчик обрадовал сегодня тем, что на некоторых компах у него все еще живут Windows 95. Вот и забеспокоился я - а будет ли работать там моя прога? Или надо ставить "шестерку" и перекомпилировать все в ней?
Неохота ради только проверки оного сносить операционку и ставить Win95. Может кто знает наверняка?

Автор: Coocky 9.9.2005, 12:40
Dreamer_0x01
Все будет работать отлично если
1.Не использууешь ActiveX элементы
2.Не используешь CRichEditCtrl 2.0
3.Иногда есть проблемы при работе с БД

Автор: JoyEx 9.9.2005, 13:54
В stdafx.h измени WINVER, _WIN32_WINDOWS и т.д. IMHO на 0x0400

Автор: Coocky 9.9.2005, 14:01
Цитата(JoyEx @ 9.9.2005, 13:54)
В stdafx.h измени WINVER, _WIN32_WINDOWS и т.д. IMHO на 0x0400

Это для компиляции, если я не ошибаюсь
Цитата

When you build an MFC project from a previous release in Visual C++ .NET, you may see compilation errors due to the fact that your project is now using a different value for WINVER.

When your project was being built in a previous version of Visual C++, WINVER may have been set to 400, to allow compilation using an earlier version of Platform SDK header files, such as may have been found on Windows 95 or Windows NT 4.0.

You may have implicitly gotten your WINVER=400 setting in one of two ways:

By using the earlier version of the Platform SDK header files that were available with the earliest versions of Visual C++ 6.0.
By including winres.h in your Visual C++ 6.0 project. This file contained a definition of 400 for WINVER.
If you got your WINVER=400 setting by either of these means, if you still need WINVER=400 to be set, and if your project is now getting compiler errors in Visual C++ .NET, you need to explicitly define WINVER=400. For example, in a header file, you could add the following line:

#define  WINVER  0x0400


Автор: Dreamer_0x01 9.9.2005, 19:48
Цитата

Все будет работать отлично если
1.Не использууешь ActiveX элементы
2.Не используешь CRichEditCtrl 2.0
3.Иногда есть проблемы при работе с БД


С этим все нормально, я вообще по-возможности все что можно поотключал и использую только "родной" MFC, который использовал и в шестой студии, с БД пока что проект не имеетничего общего.
Использую только:
1.стандртные классы и контролы MFC (CWnd, CDialog, CEdit, CComboBox , CStatic и СListControl).
2.работаю с последовательным портом ,используюдля этого ReadFile,WriteFile, SetCommTimeOuts, и др. "классические" функции.
3. Пользуюсь API-функциями

но при соблюдении этого условия надо делать #define WINVER 0x0400 или не обязательно?

Автор: Coocky 10.9.2005, 19:53
Цитата(Dreamer_0x01 @ 9.9.2005, 19:48)
но при соблюдении этого условия надо делать #define WINVER 0x0400 или не обязательно?

Я некогда не слышал и спорить не буду..
Но судя по мануалу, это для компиляции

Автор: Dreamer_0x01 11.9.2005, 19:26
Амортизатор

Спасибо за плюс, вот уж не ожидал smile

Автор: srd 11.9.2005, 20:03
Цитата
но при соблюдении этого условия надо делать #define WINVER 0x0400 или не обязательно?

Допустим, у тебя установлена свежая версия Platform SDK, в которой объявлены прототипы API функций и типов для разных версий Windows (95, 98, XP и т.п.), и перед тобой стоит задача написать программу, работающую под управлением Windows 95. Проблема в том, что ты, работая, например, под XP, можешь написать вызов функции API, существующей только в Windows 2000 или XP, и не сразу это обнаружить (ну будет у тебя прога падать под Windows 95, попробуй догадайся, почему). Стандартные заголовочные файлы Windows имеют примерно такую структуру:
Код

...
#if WINVER >= 0x0400
void WINAPI foo( void );
#endif

#if WINVER >= 0x0501
void WINAPI bar( void );
#endif
...

Здесь API функция foo() существует для Windows 95 и выше, а функция bar() - для версии Windows XP и выше.
Устанавливая нужное значение макроса WINVER, ты выбрасываешь из компиляции прототипы функций, типы и прочее, что не существует на нужной тебе версии Windows.
Другими словами, если ты по ошибке или не знанию напишешь вызов функции bar(), то получишь ошибки при компиляции, т.к. прототип этой функции был выброшен препроцессором.

Так что макросами этими пользоваться необязательно, но желательно.
Кроме WINVER, существуют ещё макросы _WIN32_WINDOWS, _WIN32_WINNT, _WIN32_IE. Смысл этих макросов и их возможные значения подробно описан в MSDN.

Надеюсь, написал понятно smile

Автор: Dreamer_0x01 11.9.2005, 23:30
Да, вполне доходчиво ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)