Использование С++ кода в Delphi. Чего добились ?
От: DevilDevil  
Дата: 30.03.10 08:19
Оценка:
Существует теоретически кроссплатформенная библиотека на C/С++. Необходимо использовать этот код в Delphi/FreePascal. Самый простой способо на сегодняшний день — использование Dll. Моя задача (моё желание) заключается в том, чтобы использовать откомпилированный (obj) код в проектах Delphi.

— откомпилированный код даёт много obj, которые сложнее увязывать. Существует ли способ компилировать несколько c/cpp файлов в один оbj ?
— какой компилятор стоит выбрать (и с какими опциями) чтобы C++ компилировался в приемлемый формат (без использования сторонних утилит по конвертировнаию форматов) и имел хорошую скорость выполнения? Intel Compiler?
— всплывают ограничения. Типа static-функции или (что ещё серьёзнее) функции RTL. Какими опциями компилятора/софтом/приёмами обходить эти ограничения ? Существует ли библиотека, содержащая основные C++RTL ? Может дампить из msvcrt.dll ? Напомню — библиотека должна быть кроссплатформенной. На x86.

На форуме я нашёл несколько старых тем. Видно, что люди рубят. Чего добились ?
какие подходы используете ?
очень нужен ваш опыт и совет

Использование .OBJ файлов от masm32 в Delph
Автор: Wyfinger
Дата: 17.01.06

dll на паскале + lib на с
Автор: SurgeonY
Дата: 16.02.06

импорт/экспорт функций из DLL
Автор:
Дата: 26.09.06

Объектные файлы и статичиские библиотеки
Автор: tacit_one
Дата: 22.09.04

Давным давно создавал ветку на wasm.ru — почитайте, сделайте выводы
Re: Использование С++ кода в Delphi. Чего добились ?
От: Sergei I. Gorelkin Россия  
Дата: 30.03.10 09:34
Оценка:
Здравствуйте, DevilDevil, Вы писали:

DD>Существует теоретически кроссплатформенная библиотека на C/С++. Необходимо использовать этот код в Delphi/FreePascal. Самый простой способо на сегодняшний день — использование Dll. Моя задача (моё желание) заключается в том, чтобы использовать откомпилированный (obj) код в проектах Delphi.


Паскаль как таковой нормально стыкуется только с C. Стыковка с C++ гораздо более проблематична из-за множественного наследования, неймспейсов и т.п. Единственным нормальным и работающим способом является написание враппера на чистом C. Так это было сделано восемь лет назад для совокупления Qt с Kylix, так оно до сих пор используется в Lazarus LCL/Qt.

DD>- откомпилированный код даёт много obj, которые сложнее увязывать. Существует ли способ компилировать несколько c/cpp файлов в один оbj ?


Если откомпилить С/С++ код в static library, то во Free Pascal результат можно целиком подключить директивой {$linklib имя_файла}. К Дельфи это не применимо.

DD>- какой компилятор стоит выбрать (и с какими опциями) чтобы C++ компилировался в приемлемый формат (без использования сторонних утилит по конвертировнаию форматов) и имел хорошую скорость выполнения? Intel Compiler?


Для FPC/Windows нужен формат coff, для FPC/Linux — формат elf, для Delphi нужен формат omf. coff генерится всеми компиляторами, omf — только Borland C++ Builder.

DD>- всплывают ограничения. Типа static-функции или (что ещё серьёзнее) функции RTL. Какими опциями компилятора/софтом/приёмами обходить эти ограничения ? Существует ли библиотека, содержащая основные C++RTL ? Может дампить из msvcrt.dll ? Напомню — библиотека должна быть кроссплатформенной. На x86.


msvcrt.dll — это RTL от C. RTL для С++ — это что-то вроде msvcp.dll. В Линуксе своя песня, каждый дистрибутив по-своему уникален. Из-за чего рантайм FPC не использует libc, а фактически реализует ее с нуля.

DD>очень нужен ваш опыт и совет


Лично у меня опыта в данной области немного, т.к. я в нее не лезу, считая ее гиблым делом.
Вот документ, обобщающий тему FPC+C:
ftp://ftp.freepascal.org/pub/fpc/docs-pdf/CinFreePascal.pdf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.