2009-04-02 3 views
4

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

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

Любые предложения?

+0

Теперь, когда прошло некоторое время, стоит отметить, что Delphi XE3 и C++ Builder XE3, вероятно, смогут настроить (но не устанавливать IDE на) Linux. Вам все равно понадобится окно Windows для сборки и разработки, но создание исполняемых файлов Linux, вероятно, станет возможным в некоторых будущих версиях Delphi или C++ Builder (возможно, 2012 или 2013). Этот вопрос, похоже, нуждается только в повторной реализации TTHread. Но я предлагаю рефакторинг OUT TThread и замену его библиотеками потоков Boost. –

ответ

3

VCL документирован на CodeGear's web site. TThread, в частности, описан here.

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

6

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

+0

Это правильный подход. Откажитесь от TThread, замените классы Threading Boost. –

+0

Я второй вышеприведенный комментарий. Если бы Embarcadero был умным, они бы построили последнюю инкарнацию своей C++ IDE с помощью Boost libs, лежащих в ее основе. –

2

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

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

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

2

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

5

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

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

Источником реализации TThread в ГКЛ должна быть достаточно легко найти.

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

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

Так что еще один вариант, как упоминалось выше, - это просто переписать с помощью другой библиотеки потоков.

1

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

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