![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ido |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 7.4.2010 Пользователь №: 1602 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть программка, которая использует для своей загрузки около 30-и WinApi-функций из Kernel32.dll, User32.dll и Ole32.dll. При дальнейшей работе дополнительных функций она не использует. Нужно заменить в исходниках вызов этих функций на аналогичные из любой кроссплатформенной библиотеки, внося минимум изменений в код. Какую библиотеку проще всего использовать для этого и есть ли для нее что-то типа справочника по аналогам функций?
|
|
|
![]() |
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
по-моему, ты себе слабо представляешь, что такое wxWidgets, виджеты - это виджеты. у этой библиотеки нет задачи переписать все API какой-то одной системы. она предоставляет общий интерфейс для работы с графикой на кроссплатформенной основе и некоторые сопутствующие библиотеки (wxBase).
вообще говоря, не очень понятно, что и с чем ты собираешься "сравнивать". к тому же, портирование, которое ты собрался производить - это, скорее всего, не только замена одних вызовов на другие. у систем есть понятие архитектуры: потоков, синхронизации, событий и т.п. и это всё реализовано в разных системах по-разному. тут однозначного алгоритма для портирования нет и быть не может. кроссплатформенные библиотеки предоставляют обобщённые функции, которые поддерживаются всеми системами. и реализация, естественно, зависит от того, под какой системой планируется работа. она может быть простой, а может быть завязана на целый каскад действий, в зависимости от системы и требуемого эффекта. |
|
|
ido |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 7.4.2010 Пользователь №: 1602 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
по-моему, ты себе слабо представляешь, что такое wxWidgets... Пока только начал искать и вопрос такой: качать иль не качать. Если качать, тогда что именно(не всё же подряд). Вот нашел по отдельным файламЦитата ============================================================================ Здесь явно видно WinApi-функцию -- CreateTempFileName(). Так искать удобнее, чем по документации Qt. Может есть более простой вариант. С программой, где надо заменять, всё достаточно просто, если не придется использовать case, разделяя код для Windows и Linux. 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: } |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 11:13 |