Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > Переносимость программ Win98->WinNT


Автор: Chingachguk 4.4.2002, 11:50
Начал изучение Windows, написал простой примерчик с использованием следующих АПИ из библиотеки gdi32.dll:

- CreateFont;
- SelectObject;
- SetTextColor;
- SetBkColor
- TextOut;

(просто поигрался, выводя текст под разными углами). На win98 все работает, выслал другу посмотреть - у него NT - и не работает ! (он говорит, что программа не хочет запускаться).
Почему ? Я использовал стандартные средства Windows !

Автор: BearBeer 4.4.2002, 12:25
приложение консольное?

НА чем писано? Вообсче вопрос больше в "системы" ;)

Автор: BearBeer 4.4.2002, 12:29
Про ядро Windows NT

Цитата

Подсистема Win32. Главные компоненты подсистемы Win32 - процесс подсистемы среды и драйвер режима ядра. Процесс подсистемы среды поддерживает:

консольные (текстовые) окна;
создание и удаление процессов и потоков;
работу виртуальной 16-разрядной DOS машины;
иные функции (GetTempFile, DefineDosDevice, ExitWindowsEx и др.).
Драйвер режима ядра поддерживает:

менеджер окон, который управляет отображением окон, выводом на экран, вводом с клавиатуры, от мыши и других устройств, а также передачей пользовательских сообщений приложениям;
интерфейс графических устройств GDI (Graphical Device Interface), библиотека функций для вывода на графические устройства, для рисования текста, линий, фигур и манипуляций графическими объектами;
зависимые от устройств драйверы графики, принтера и видеопорта;
несколько библиотек DLL, которые транслируют документированные функции Win32 API в соответствующие недокументированные вызовы NTOSKRNL.EXE и WIN32K.SYS.
Приложения вызывают стандартные функции для создания окон и кнопок на дисплее. Менеджер окон передает эти запросы драйверам графических устройств через интерфейс графических устройств GDI, где они форматируются для вывода средствами конкретных устройств. GDI обеспечивает набор стандартных функций, позволяющих приложениям общаться с графическими устройствами, включая дисплеи и принтеры, без конкретных знаний о них. GDI интерпретирует запросы приложений на графический вывод и посылает их драйверам графических дисплеев. Этот интерфейс позволяет создавать код приложения, независимый от конкретных устройств и их драйверов.

NTDLL.DLL - это специальная система поддержки DLL - библиотек. Она содержит два типа функций.

Первая группа функций обеспечивает интерфейс к службам NT, которые могут быть вызваны из пользовательского режима. Существует более 200 таких функций, например NtCreateFile, NtSetEvent и т.д. Для каждой из них имеется точка входа в NTDLL.DLL с тем же именем. Внутренний код функции содержит специфичные для архитектуры команды, которые вызывают переход в режим ядра для обращения к реальным службам NT, код которых содержится в NTOSKRNL.EXE.
Вторая группа функций содержит большое количество функций поддержки: загрузчик исполняемых модулей, коммуникационные функции для процессов подсистемы Win32, библиотека функций реального времени пользовательского режима, диспетчер вызовов асинхронных процедур АРС (Asynchronous Procedure Call) пользовательского режима, диспетчер исключений.


POdrobnee zdes': http://www.osp.ru/os/1999/01/06_print.htm

// Udachi  :)

Автор: Vit 4.4.2002, 15:08
Вроде все функции что ты описал определены для всех версий виндов, а вообще NT и 98 совсем разные системы, они просто попытались API определить так же, но реализация разная. Если програмлешь на VС, VB, Delphi то там библиотеки как правило продуманы так чтоб использовать только ограниченный набор API который работает почти одинаково под всеми виндами, когда спускаешься на уровень использования самих API - тут лезут разногласия со всех сторон, без проверки кода на машинах с разными виндами не обойтись :(

Автор: Chingachguk 5.4.2002, 02:19
Спасибо за ответы ! ;)

Приложение не консольное. Графическое. Открываю окошко. В процедуре получения событий окошка жду события WM_PAINT и рисую... Этими вот ф-циями из gdi32.

Странно ... Тем же пакетом (MASM32) я собрал тупейший MessageBox и он работал под NT... А теперь я собрал (дома) им же этот пример с gdi32 и выслал другу - а он грит, не работает ... Ладно, я его заставлю еще раз проверить.

Автор: Vit 5.4.2002, 03:52
Chingachguk, как я понимаю ты работаешь исключительно на низком уровне, мой тебе совет, Partition Magic - освободи 1Гиг на харде (хотя в принципе будет достаточно 300-500 метров, но он может начать кричать что мало), сделай на нем еще одну Primary (не Extended!;) Partition. Поставь на нее Win2000pro и все программы запускай и на 98 и на 2000 - в противном случае ты запаришься посылать другу прогу и получать у него невразумительное сообщение об ошибке... Слишком многие функции работают по разному, это как ДОС 3.3 с ДОС 6.22 сравнивать - кто работал на них меня поймет - вроде все тоже только часть функций в одной системе отсутствует, часть работает не так, а часть вообще не функции, а так заглушки для будущих разработок...
Только если будешь 2000 ставить ни в коем случае не ставь на ту же Partition что и 98, он ее поломает, даже если ты его в другую папку поставишь, а на разных разделах они прекрасно уживаются.

Автор: BearBeer 5.4.2002, 11:50
все правильно. Многие системные вызовы различаются.

Архитектура НТ разрабатывалась отличнож от предыдусчих версиж.

ПОетому я и дал ссылку на статью о ядре. Оттуда надо и плясать.

Автор: Vyacheslav 5.4.2002, 17:54
Цитата(Vit @ 05.4.2002, 03:52)
Только если будешь 2000 ставить ни в коем случае не ставь на ту же Partition что и 98, он ее поломает, даже если ты его в другую папку поставишь, а на разных разделах они прекрасно уживаются.

У меня прекрасно одно время уживались Win2000 и Win98 на одном partition.Не люблю я диски бить. Сейчас для Win2000 купил второй диск

Автор: Vit 5.4.2002, 18:07
Нет не уживаются они потому что папка "Program Files", а вместе с ней и "Common Files" становятся общими, да винды сами по себе работают, но например попробуй поставить любую программу кроме пасьянса, ставишь на одни винды она выбивает ее же на других виндах, корректной работы можно добится только на разных разделах.

Автор: Wowa 5.4.2002, 19:37
Я думаю уживаемость Вин2к и Вин98 можно обсудить в соседней теме!  ;)

Тем более, что тема - неплохая!

Автор: Chingachguk 6.4.2002, 01:37
Спасибо за поддержку ! ;)

Хотел сказать, что я тока-тока учусь винде... Вон, пот со лба утираю после разборок с VxD - малюсенькую задачечку тока сделал. Ну и интерфейсом тоже параллельно маюсь ;) Так что пока это не главное - переносимость, а лучше пока плюнуть, раз так все запущенно - и изучать дальше, верно,
парни ?

А насчет установки на мой жалкий Samsung 1.2 второй винды ... Проще сразу взять болгарку и ... Но в принципе идея верная - если буду писать серьезные вещи, то так и сделаю !

Насчет статьи. Я прочел ее, один раз правда. Честно говоря, во мне только окрепло убеждение "если б знали вы, что за тормозы все виндовые драйвера" от ее прочтения ... Одно время на работе находились вместе я и NT,  не могу сказать, что она меня сильно радовала ... Дохла тоже, только реже 98-ой. А что делать ? © Чернышевский. Видно, все равно придется ...

Еще раз всем спасибо и пардон, Админ, за флейм ! ;)

Автор: Alex101 8.4.2002, 14:56
Цитата(Chingachguk @ 04.4.2002, 11:50)
Начал изучение Windows, написал простой примерчик с использованием следующих АПИ из библиотеки gdi32.dll:

- CreateFont;
- SelectObject;
- SetTextColor;
- SetBkColor
- TextOut;

(просто поигрался, выводя текст под разными углами). На win98 все работает, выслал другу посмотреть - у него NT - и не работает ! (он говорит, что программа не хочет запускаться).
Почему ? Я использовал стандартные средства Windows !

У меня работают под 2000-ми, линолиумом и 95 (другие просто не пробовал)
- CreateFont;
- SelectObject;
- TextOut;

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