Как перенести код для компоновщика Borland C++ в Linux?

StackOverflow https://stackoverflow.com/questions/710649

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть исходный код для Windows DLL, написанный на C++ и использующий библиотеку визуальных компонентов.Теперь моя задача — портировать это на Linux, но у меня нет исходного кода самой VCL или какой-либо документации (и я никогда не работал с Borland C++;в дни Windows я использовал MFC).

Это не должно быть так уж сложно, поскольку моя DLL не имеет графического интерфейса:насколько я вижу, для многопоточности он в основном использует VCL.Я столкнулся с классом, который наследуется от TThread, и здесь я застрял.Я поискал в Интернете, но пока не нашел документации по VCL.Я бы не хотел покупать книгу по Borland C++ Builder, потому что у меня нет времени ждать ее прибытия с Amazon.Я не могу рассматривать покупку пакета для Windows, потому что на работе у меня есть только Linux.

Какие-либо предложения?

Это было полезно?

Решение

VCL документирован на Веб-сайт CodeGear.TThread, в частности, описан здесь.

Я обнаружил, что документация по компонентам VCL, связанным с многопоточностью, довольно скудна. Этот сайт имеет гораздо лучшее описание подхода Delphi/VCL к многопоточности.

Другие советы

Библиотеки Boost и wxWidgets предоставят аналоги классов VCL.

Вы должны знать, что VCL, используемый C++ Builder, полностью написан на Delphi/ObjectPascal.Все приложения для создания C++ используют C++ с использованием библиотек на основе Delphi.

Проект с открытым исходным кодом FreePascal/Lazarus перепроектировал большую часть VCL (почти все невизуальные элементы и большую часть визуальных элементов) и изначально работает в Linux.Невизуальный VCL-совместимый материал известен как «Библиотека свободных компонентов» («FCL»).http://www.freepascal.org/ http://www.freepascal.org/fcl/fcl.var

Исходный код реализации TThread в FCL найти достаточно легко.

Одним из вариантов было бы переписать на FreePascal, где язык изменится на ObjectPascal, но вызовы VCL и использование компонентов VCL будут практически идентичны.

Другим вариантом может быть портирование на C++ в Linux и каким-то образом использовать VCL FreePascal из C++.Я не уверен в практичности/осуществимости этого.Кто-нибудь на форумах FreePascal сможет помочь ответить на этот вопрос.

Итак, другой вариант, как кто-то упомянул, — это просто переписать с использованием какой-либо другой библиотеки потоков.

Вы можете скачать их бесплатный компилятор и попробуйте поэкспериментировать с ним.По крайней мере, его можно будет запустить под WINE.Возможно даже под FreeDOS.

Он должен быть связан с классом TThread в Delphi/Kylix.Это еще одна альтернатива для его изучения.Я считаю, что наиболее важными методами были run() и sync(), но я уже давно их не использовал.

Однако, если вы планируете полностью портировать код в Linux, возможно, вам поможет перереализовать класс TThread самостоятельно, используя какие-нибудь библиотеки повышения или что-то в этом роде.

Много лет назад Borland выпустила версию своей IDE для Linux, продаваемую как Кайликс.Я не уверен, поддерживается ли он до сих пор, но для вас это может быть путем наименьшего сопротивления.

Существует несколько библиотек, которые предоставляют такие платформы, как многопоточность, например.Boost (www.boost.org) или ACE (http://www.cs.wustl.edu/~schmidt/ACE.html)

Перенести код для использования одной из этих потоковых инфраструктур должно быть довольно легко.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top