crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Чем заменить WinApi?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ido Дата 13.4.2010, 6:30
 
Цитата(Iron Bug)
ты уверен, что структура твоей программы настолько линейна, однопоточна и примитивна, что её можно перенести на другую платформу, заменив только API?
Программа отнюдь не примитивна. Есть ядро системы, которое использует библиотеки Kernel.dll, Ole32.dll, User32.dll(только их надо заменить). Кроме того, создаются объектные файлы в специфическом формате и есть линкеры для Windows и Linux. Используется графическая среда, предоставляемая ОС. Например, при помощи библиотеки Japi можно использовать платформу Ява. В Linux’е можно будет потом определиться, использовать ли XWindow или еще как-то.
Iron Bug Дата 12.4.2010, 21:49
  видишь ли, кроссплатформенные библиотеки не были задуманы как замена API какой-то одной системы. они позиционируются как средство разработки кроссплатформенных приложений и больше рассчитаны на создание кроссплатформенных приложений с нуля, базируясь на средствах библиотеки. потому что работа в системе состоит не только из вызовов функций. это только малая часть.
ты уверен, что структура твоей программы настолько линейна, однопоточна и примитивна, что её можно перенести на другую платформу, заменив только API? и не проще ли создать новое кроссплатформенное приложение и в него интегрировать "рабочие" куски кода из старой программы?
Litkevich Yuriy Дата 12.4.2010, 16:01
 
Цитата(ido @ 12.4.2010, 18:25) *
Просьба высказывать конструктивные предложения.
какие тебя предложения ещё интересуют? Ты с библиотекой определился?
ido Дата 12.4.2010, 14:25
  Вся сложность задачи понятна. Почти всё, что есть в сети конкретно по моему вопросу известно. Другое дело, если это не может привести к обобщениям для разработки каких-то новых методик запуска других кроссплатформенных приложений(или сделать из обычной проги кроссплатформенную). Но и принципиальной невозможности для этого я пока не вижу, кроме того, что надо долго и упорно капаться в исходниках.
Цитата(Iron Bug)
если что-то конкретное нужно.
Для начала нужно заменить функции в исходниках так, чтобы собранная программа обращалась к системе(пока только Windows) через какую-то кроссплатформенную библиотеку. Бустовскую документацию я как открыл, так и закрыл. С ходу ничего не понял. Из Qt можно что-то брать, но для небольшого количества функций. В исходниках wx встречается большое количество аналогий c WinApi-функциями. Кстати, в предыдущем своем сообщении я не корректно обозвал CreateTempFileName() функцией WinApi. В мсдн есть GetTempFileName(). Это наводит на мысль, что аналогии формальные и, значит, где-то что-то не сойдется. Может, кто-нить подскажет через какую еще кроссплатформенную библиотеку можно достать WinApi-функции.
Цитата(Litkevich Yuriy)
Т.к. указанные библиотеки довольно сложны по внутреннему устройству и предполагают конфигурацию и последующую сборку как отдельных библиотек (динамически или статически линкуемых с приложением)
В данном случае план такой. В исходниках программы вызовы WinApi-функций заменяются вызовом функций с аналогичным действием из кроссплатформенной библиотеки. Пишется интерфейсный модуль для этой библиотеки, которая, в свою очередь, является интерфейсом к ОС.

Просьба высказывать конструктивные предложения.
Litkevich Yuriy Дата 12.4.2010, 8:50
  добавлю:
Простое подключение нескольких исходников в свой проект может привести к ошибкам сборки. Т.к. указанные библиотеки довольно сложны по внутреннему устройству и предполагают конфигурацию и последующую сборку как отдельных библиотек (динамически или статически линкуемых с приложением)
Iron Bug Дата 12.4.2010, 8:37
  дык, исходники-то всегда доступны. а код в исходниках не так уж и велик. по меркам современных сетей и вовсе мелок - несколько мегабайт для очень крупных библиотек. весь код обычно доступен и в хранилище, и в слепках. и QT, и wxWidgets, и boost имеют много реализаций под разные системы и весь код можно просматривать.
только копать там долго придётся, если что-то конкретное нужно. я думаю, в сети должны быть материалы по портированию и кто-нибудь, да собирал это всё в единую кучу. так что имеет смысл поискать такие ресурсы, прежде чем самому городить огород.
ido Дата 11.4.2010, 23:35
 
Цитата(Iron Bug @ 11.4.2010, 19:43) *
по-моему, ты себе слабо представляешь, что такое wxWidgets...
Пока только начал искать и вопрос такой: качать иль не качать. Если качать, тогда что именно(не всё же подряд). Вот нашел по отдельным файлам
Цитата
============================================================================
458: // implementation of wxTempFile
459: // ============================================================================
460:
461: // ----------------------------------------------------------------------------
462: // construction
463: // ----------------------------------------------------------------------------
464:
465: wxTempFile::wxTempFile(const wxString& strName)
466: {
467: Open(strName);
468: }
469:
470: bool wxTempFile::Open(const wxString& strName)
471: {
472: // we must have an absolute filename because otherwise CreateTempFileName()
473: // would create the temp file in $TMP (i.e. the system standard location
474: // for the temp files) which might be on another volume/drive/mount and
475: // wxRename()ing it later to m_strName from Commit() would then fail
476: //
477: // with the absolute filename, the temp file is created in the same
478: // directory as this one which ensures that wxRename() may work later
479: wxFileName fn(strName);
480: if ( !fn.IsAbsolute() )
481: {
482: fn.Normalize(wxPATH_NORM_ABSOLUTE);
483: }
484:
485: m_strName = fn.GetFullPath();
486:
487: m_strTemp = wxFileName::CreateTempFileName(m_strName, &m_file);
488:
489: if ( m_strTemp.empty() )
490: {
491: // CreateTempFileName() failed
492: return false;
493: }
494:
495: #ifdef __UNIX__
496: // the temp file should have the same permissions as the original one
497: mode_t mode;
498:
499: wxStructStat st;
500: if ( stat( (const char*) m_strName.fn_str(), &st) == 0 )
501: {
502: mode = st.st_mode;
503: }
504: else
505: {
506: // file probably didn't exist, just give it the default mode _using_
507: // user's umask (new files creation should respect umask)
508: mode_t mask = umask(0777);
509: mode = 0666 & ~mask;
510: umask(mask);
511: }
512:
513: if ( chmod( (const char*) m_strTemp.fn_str(), mode) == -1 )
514: {
515: #ifndef __OS2__
516: wxLogSysError(_("Failed to set temporary file permissions"));
517: #endif
518: }
519: #endif // Unix
520:
521: return true;
522: }
Здесь явно видно WinApi-функцию -- CreateTempFileName(). Так искать удобнее, чем по документации Qt. Может есть более простой вариант. С программой, где надо заменять, всё достаточно просто, если не придется использовать case, разделяя код для Windows и Linux.

Iron Bug Дата 11.4.2010, 19:43
  по-моему, ты себе слабо представляешь, что такое wxWidgets, виджеты - это виджеты. у этой библиотеки нет задачи переписать все API какой-то одной системы. она предоставляет общий интерфейс для работы с графикой на кроссплатформенной основе и некоторые сопутствующие библиотеки (wxBase).
вообще говоря, не очень понятно, что и с чем ты собираешься "сравнивать".
к тому же, портирование, которое ты собрался производить - это, скорее всего, не только замена одних вызовов на другие. у систем есть понятие архитектуры: потоков, синхронизации, событий и т.п. и это всё реализовано в разных системах по-разному. тут однозначного алгоритма для портирования нет и быть не может. кроссплатформенные библиотеки предоставляют обобщённые функции, которые поддерживаются всеми системами. и реализация, естественно, зависит от того, под какой системой планируется работа. она может быть простой, а может быть завязана на целый каскад действий, в зависимости от системы и требуемого эффекта.
ido Дата 10.4.2010, 14:29
  Нашел у себя в глубоких архивах исходники, примеры и документацию для Qt-3.3. Всё-таки слишком долго искать функции, вычитывая аналоги из англицкой документации.

Интересен такой момент из Wiki про wxWidget:
Цитата
основной код wxWidgets предпочитает вызывать «родной» элемент интерфейса платформы, вместо того, чтобы повторно его реализовывать.
Каков механизм вызова? Ведь гораздо быстрее сравнивать исходники, если видны различия и указываются Api-функции или вызовы ядра системы.
Litkevich Yuriy Дата 9.4.2010, 17:50
 
Цитата(ido @ 9.4.2010, 20:33) *
У меня есть возможность посмотреть Qt только в Linux’е.
посмотри тут
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:14