Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Кроссплатформенное программирование  (Прочитано 32561 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« : 03-12-2009 20:51 » 

Получил задание: сделать (простую) программу, которая может работать на машинах 32/64-bit с ОС Windows XP/Vista/7 (да и просто - такое знать полезно, а мне - и интересно). Ничего подобного раньше не встречал. Подскажите пожалуйста, что для этого надо знать? Может есть какие-то книги по этому делу? Или ссылки? Буду очень благодарен всему!  Улыбаюсь

P.S. Заинтересовала тема https://forum.shelek.ru/index.php/topic,5267.0.html... Но то для Delphi... Больше ничего на этом форуме не нашел.
« Последнее редактирование: 22-01-2010 14:21 от Вад » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 03-12-2009 21:14 » 

На уровне сырцов практически нет никаких проблем, если не применять всякие трюки. На уровне откомпилированного кода, скорее всего приложения не запустятся. Или будет работать в режиме эмулятора.

Кстати тема названа не корректно. Или уже Windows Vista это не продолжение Windows XP?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 03-12-2009 21:16 » 

Знать для этого надо много чего. Думаю, что прежде всего - требования этих ОС по безопасности, размещению файлов и т.п.
В контексте 32/64 нужно знать, какие типы применять и не путать с другими, имеющими на 32-битной платформе один размер. Например, int и long - разные типы. В 32-битных системах они не отличаются, а вот в других системах имеют разный размер: int - размер целого для данной платформы (16, 32, 64), long - 32 бита.

Разве компилятор Delphi умеет создавать 64-битный код?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #3 : 03-12-2009 21:17 » 

Кстати тема названа не корректно. Или уже Windows Vista это не продолжение Windows XP?
Суть темы - не научитЬся программировать под Windows XP/Vista/7, а вообще, под разные ОС: под Windows, Linux и т. д.

В контексте 32/64 ... long - 32 бита.
Я так понял, что для 32/64 нужно быть осторожным с размеры типов данных и всего.

Разве компилятор Delphi умеет создавать 64-битный код?
Не понял Жаль . Но всё-равно Delphi меня не интересует.
« Последнее редактирование: 04-12-2009 06:03 от Sel » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 03-12-2009 21:26 » 

P.S. Заинтересовала тема https://forum.shelek.ru/index.php/topic,5267.0.html... Но то для Delphi... Больше ничего на этом форуме не нашел.

Разве не ты сказал про Delphi?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 03-12-2009 21:29 » 

На уровне сырцов практически нет никаких проблем, если не применять всякие трюки. На уровне откомпилированного кода, скорее всего приложения не запустятся. Или будет работать в режиме эмулятора.
То есть, все-таки готовая программа может и не запуститься под XP или Vista или "коряво" работать?

Разве не ты сказал про Delphi?
Я имел ввиду, что тема определения версии ОС интересна. И что, к сожалению, она решена на Delphi, который мне не поможет. Извините, что неточно выразился.
« Последнее редактирование: 04-12-2009 06:02 от Sel » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 03-12-2009 21:32 » 

Inkognito, посмотри вот эту тему: https://forum.shelek.ru/index.php/topic,22548.0.html
Меня тоже интересуют вопросы совместимости: есть уже готовое ПО в исходниках, работающее под XP, и как его можно адаптировать для Vista/W7.

По твоей ссылки ничего про совместимость нет - там лишь получение версии ОС.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 03-12-2009 21:35 » 

Ну чтоб код почти без исправлений мог компилироваться и в Винде и в *nix. Есть два пути, Или полностью придерживаться только стандартных библиотек. Или использовать кросс платформенные библиотеки. Первый способ не всегда работает. Microsoft любит заниматься самодеятельностью, даже в стандартных вешах. И даже наперекор своим собственным стандартам. Второй способ более приемлем. Так как все неровности в подходах разных ОС берет на себя кроссплатформенная библиотека. Ты же работаеш только средствами этой библиотеки. Самая известная из них это Qt фирмы Trolltech. Правда где то год назад ее полностью выкупила фирма Nokia.

На уровне сырцов практически нет никаких проблем, если не применять всякие трюки. На уровне откомпилированного кода, скорее всего приложения не запустятся. Или будет работать в режиме эмулятора.
Тоесть все-таки готовая программа может и не запуститься под XP или Vista или "коряво" работать?
Тому примеров куча. Недавно в новостных лентах видел. Что составляется уже список приложений, которые работали прекрасно в Vista и не работают в семерке. Про Хр я молчу.
« Последнее редактирование: 03-12-2009 21:39 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 03-12-2009 21:45 » 

На счет 32/64-bit. Тип char, насколько я знаю, всегда занимает 1 байт. Исходя из этого можна создать свой тип данных, где за базу взят char. В таком случае, думаю, проблем быть не должно

Нашел вот http://msdn.microsoft.com/ru-ru/library/aa905330.aspx, но правда еще не разобрался, может и ничего более-менее полезного...

Еще вот (думаю более полезная информация): http://msdn.microsoft.com/ru-ru/library/bb757005.aspx.
« Последнее редактирование: 03-12-2009 21:59 от Finch » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 03-12-2009 21:57 » 

Inkognito, А писать код, который будет знать твой тип, и который сможет работать с твоим типом?

Я не знаю как студия компилирует.  GCC в 64 разрядной среде битность типов практически не меняет. Едиственное что она меняет, из того что я заметил, это указатели. Но оно и понятно. Чтобы компилятор компилировал согласно стандарту для 64 разрядной среды, нужно указывать специальный ключик компиляции. Сделано это я так думаю, чтоб не слишком править код для 64 рязрядной среды в Linux. Но уже готовое приложение без эмуляции нельзя запустить в 32 системе и  наоборот.


Inkognito, Это не чат. Старайся все писать в один пост. А не разбрасывать по предложению в несколько постов. Функция редактирования поста у тебя должна уже работать.
« Последнее редактирование: 03-12-2009 22:03 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 28-12-2009 06:44 » 

Решил заняться изучением кроссплатформенного программирования.
Нашел учебник. Но там, почему-то, не указали, в какай среде работать. В результате, компилятор ругается сразу на строчке #include <QtGui>.
Кто работал с Qt - подскажите: в какой программе мне работь, что установить на компьютер?
И кстати: обязательно писать QtGui или можно и qtgui? (Хотя в лубом случае я буду использовать первый вариант, но всё равно интересно знать)
« Последнее редактирование: 28-12-2009 06:58 от Inkognito » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 28-12-2009 08:42 » 

Inkognito, сходи на сайт производителя Qt: www.trolltech.com
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 28-12-2009 09:42 » 

Для виндовс, если ты работаешь в VC++, то Qt идет на коммерческой основе, что в принципе логично. Если у тебя есть деньги приобрести официальную студию, значит ты занимаешся коммерческой деятельностью. Значит должен приобрести коммерческий вариант и Qt..  Чтоб работать для обучения, нужно ставить также пакет MinGW. Это портирование GCC в винду. И, естественно, писать в стиле GCC.
#include <QtGui>
 Да, так обязательно писать, иначе у тебя в других ОС будут проблемы. Все *nix регистрозависимы в названии файлов.
« Последнее редактирование: 21-01-2010 14:41 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #13 : 21-01-2010 13:56 » 

Извините за пост, но:
Цитата: Finch
Для виндовс. Если ты работаеш в VC++. То Qt идет на коммерческой основе. Что в принципе логично. Если у тебя есть деньги приобрести официальную студию. Значит ты занимаешся коммерческой деятельностью. Значит должен приобрести коммерческий вариант и Qt.. Чтоб работать для обучения. Нужно ставить также пакет MinGW. Это портирование GCC в винду. И естественно писать в стиле GCC.
Finch, очень сложно понять ход твоих мыслей, когда ты пишешь в таком стиле. Предложения без логического завершения (или начала).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 21-01-2010 14:42 » 

Inkognito, это не стиль, а отсутствие клавы с кириллицей )
Записан

Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #15 : 22-01-2010 14:01 » 

Улыбаюсь
То есть, если я работаю над коммерческим проектом, то должен оплатить использование Qt, правильно?
« Последнее редактирование: 22-01-2010 20:57 от Inkognito » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #16 : 22-01-2010 14:08 » 

Да. Причем насколько я понял лицензионное соглашение. Одно рабочее место одна лицензия. Более конкретно, чтоб узнать цены. Нужно обрашаться к ним по E-mail. Цена около 1000 баксов за лицензию, в зависимости от комплектации. Но есть также скидки.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #17 : 22-01-2010 21:01 » 

Ого!
А если я пишу программу не в коммерческих целях, программу для свободного распостранения и использования, могу я использовать Qt бесплатно? Или ИСЛЮЧИТЕЛЬНО для ОБУЧЕНИЯ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #18 : 22-01-2010 21:11 » 

У Qt два  вида лицензий. Одна LGPL и одна коммерческая. Если ты используеш бесплатную версию Qt, значит ты пишеш свою программу по LGPL лицензии. Которая допускает бесплатное использование библиотеки в любых целях, кроме коммерческих. Только если ты вносиш в код Qt какие либо изменения. Ты должен в обязательном порядке опубликовать.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #19 : 18-03-2010 10:49 » 

Извините за столь глупый, возможно, вопрос, но у Qt (у меня 4.6.0) есть что-то типа ConfirmDialog'а? Улыбаюсь А то я что-то не нашел.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #20 : 18-03-2010 11:45 » 

Посмотри QMessageBox. Этот диалог как швецарский армейский нож.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #21 : 18-03-2010 11:47 » 

http://doc.qt.nokia.com/4.6/qmessagebox.html
с картинками Улыбаюсь
Записан

Странно всё это....
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #22 : 18-03-2010 11:50 » 

Ну да, можно заменить с помощью
Код:
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
Улыбаюсь

Решение, как всегда, проще, чем искалось. Спасибо.
« Последнее редактирование: 18-03-2010 11:54 от Inkognito » Записан
clearance
Гость
« Ответ #23 : 22-03-2010 01:02 » 

Например, int и long - разные типы. В 32-битных системах они не отличаются, а вот в других системах имеют разный размер: int - размер целого для данной платформы (16, 32, 64), long - 32 бита.
short не может быть длиннее int
int не может быть длиннее long
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 22-03-2010 07:08 » 

clearance, источник, пожалуйста, и ссылки на него.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
clearance
Гость
« Ответ #25 : 22-03-2010 08:37 » 

http://www.open-std.org/JTC1/SC22/WG14/
6.3.1.1
это 99 (черновик)
но это с 89 ещё
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #26 : 22-03-2010 09:08 » 

+1
Записан

Странно всё это....
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 22-03-2010 12:01 » 

clearance, -1: это не ссылка, а помойка.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #28 : 22-03-2010 14:29 » 

Цитата
3.9.1 Fundamentals type
2.  There are four signed integer types: “signed char”, “short int”, “int”, and “long int.” In this
  list, each type provides at least as much storage as those preceding it in the list. Plain ints have the natu-
  ral size suggested by the architecture of the execution environment39) ; the other signed integer types are
  provided to meet special needs.
Про тип long ничего не сказано.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 22-03-2010 17:53 » 

6. Language
6.2 Concepts
6.2.5 Types


Цитата
There are five standard signed integer types, designated as signed char, short
int, int, long int, and long long int.

6.3 Conversions
6.3.1 Arithmetic operands
6.3.1.1 Boolean, characters, and integers


Цитата
Every integer type has an integer conversion rank defined as follows:

* The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.

Размеры не регламентированы, но сказано: char < short < int < long < long long

Честно говоря, не помню, где читал про фиксированный размер long. То ли какой-то старый стандарт, то ли еще чего. Короче, я ошибался.

Посмотрел в заголовках glibc:

Для 32-бит:
char8
short16
int32
long32
long long64

Для 64-бит:
char8
short16
int32
long64
long long64
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines