перенос/портирование Linux to Windows (общие рекомендации)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

перенос/портирование Linux to Windows (общие рекомендации)

Сообщение sunjob »

день добрый!
не нашел подобной темы, предлагаю выкладывать/делиться секретами/феньками и плюшками.
надеюсь, в будущем пригодиться.
пожалуйста, только без очевидных моментов :о)

п.с. столкнулся с кучей косяков/тонкостей и особенностей при переносе простого приложения (lin to win), поэтому решил пошерстить темы, оказалось совсем мало. аминь!
RRYTY
постоялец
Сообщения: 253
Зарегистрирован: 25.12.2021 09:00:32

Сообщение RRYTY »

sunjob писал(а):столкнулся с кучей косяков/тонкостей и особенностей при переносе простого приложения (lin to win)
И какие косяки, тонкости и особенности? Что за "простое приложение"?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Код: Выделить всё

  {$IFDEF WINDOWS}
  SimpleIPCServer1.StartServer(False);
  {$ELSE}
  SimpleIPCServer1.StartServer;
  {$ENDIF}        
Вот такое приходилось использовать при сборке под Win32 (64 - не пробовал). Не хотел TSimpleIPCServer работать в многопоточном режиме.
Ну и ещё:

Код: Выделить всё

      {$IFDEF WINDOWS}
      LHelpConnector1.LHelpPath :=CurDir+'lhelp.exe';
      {$ELSE}
      LHelpConnector1.LHelpPath :=CurDir+'lhelp';
      {$ENDIF}        
И ещё:

Код: Выделить всё

{$IFDEF WINDOWS}
  HostName:=SysUtils.GetEnvironmentVariable('COMPUTERNAME');
  {$ENDIF}
  {$IFDEF UNIX}
  HostName:=SysUtils.GetEnvironmentVariable('HOSTNAME');
  {$ENDIF}             
Это навскидку. Может быть, ещё что-нибудь припомню...
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

Сообщение sunjob »

...
Последний раз редактировалось sunjob 11.09.2024 13:15:02, всего редактировалось 1 раз.
Seenkao
энтузиаст
Сообщения: 569
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

Занимался портированием, читайте, будет полезно, люди так же давали некоторые советы. Постарался расписать последовательность действий, но может не совсем понятно.

Добавлено спустя 24 минуты 32 секунды:
Re: перенос/портирование Linux to Windows (общие рекомендации)
Общая последовательность такая:
1. портируете проект.
2. пытаетесь запустить, если проект запускается то переходим к пункту 5.
3. "удаляете" (комментируете) места где происходит ошибка. Если проект большой, записывайте всё что "удаляли" себе в блокнот. Если понимаете где надо будет делать подобные действия, просто делайте без очередной компиляции проекта.
4. повторяете 3-й пункт пока не скомпилируется проект.
5. начинаете само портирование программы. Самый долгий и самый нудный процесс, здесь вам надо попытаться восстановить то, что вы "удаляли" ранее. Самое основное в этом случае, это функциональность созданную для Windows надо:
- заменить, благо для этого уже существует ряд модулей LCLIntf.
- подменять какими-то своими или уже готовыми решениями. На что уйдёт больше сил.

Терпения вам!
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

Сообщение sunjob »

Код: Выделить всё

writeln('string'); 
под виндой выдаст исключение (в режиме GUI). такой подлости от винды я не ожидал :mrgreen:
p.s. (можно не комментировать, бормант уже наставил на путь истинный :D )

(из диалога)
Процесс может быть
- консольным (флаг в PE-заголовке), тогда при старте ему винда создаст консоль и свяжет с ней stdIn, stdOut, stdErr.
- GUI, тогда не создаст и не свяжет.
+
а как народ выкручивается?
-->
Логи в журнал винды или в файл.
Если нужно в консоль, можно создать отдельно
+
Write или WriteLn без явного указания файла - это

Код: Выделить всё

Write(Output, ...)
WriteLn(Output, ...)
+
Чтобы Write, WriteLn в файл писал:

Код: Выделить всё

Output: AssignFile(Output, pathTo); 
Rewrite(Output);
<...>
Close(Output);
+
AllocConsole
using-the-console
MaratIsk
постоялец
Сообщения: 125
Зарегистрирован: 20.08.2009 18:15:20

Сообщение MaratIsk »

как только начинают портирование с одной платформы на другую или ЯП на другой, я понимаю, что проект вошел в стадию энтропии :D
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

sunjob писал(а):Процесс может быть
- консольным (флаг в PE-заголовке), тогда при старте ему винда создаст консоль и свяжет с ней stdIn, stdOut, stdErr.
- GUI, тогда не создаст и не свяжет.
+
а как народ выкручивается?
Гуёвое приложение при старте создаёт консоль и один раз сворачивает её. Если при этом свернутся лишние консоли, то это будет один раз.

Добавлено спустя 3 минуты 18 секунд:
Re: перенос/портирование Linux to Windows (общие рекомендации)
MaratIsk писал(а):как только начинают портирование с одной платформы на другую или ЯП на другой, я понимаю, что проект вошел в стадию энтропии :D
Необязательно. Больше всего пользователей в винде, а разработчик может её не любить и писать в линуксе а потом собирать виндовую сборку в вайне, тогда к проекту не прицепятся лишние виндовые зависимости, бо что виндовое не работает в вайне - не нужно :mrgreen:
MaratIsk
постоялец
Сообщения: 125
Зарегистрирован: 20.08.2009 18:15:20

Сообщение MaratIsk »

Сударь, Вы не поняли - портирование проекта или перенос решения на другую платформу или ЯП, говорит об одном - пришел новый техдир со своими тараканами в голове и идеями - все переписать
Ответить