Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 406

/ вопрос решён /

Как к Delphi прицепить С-ный lib-файл? Поясню: есть библиотека (в исходниках) откомпилированная CBuilder (т. е. obj-файлы доступны). Нужно её прицепить к проекту на Delphi, но dll использовать нельзя. Спасибо

mvp Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: mvp (статус: 4-ый класс)
Вопрос отправлен: 14 марта 2007, 12:35
Состояние вопроса: решён, ответов: 5.

Ответ #1. Отвечает эксперт: Вадим К

Если она действительно в билдере скомпилирована, то некоторая надежда есть. Для этого надо знать точно сигнатуру функций.
Итак, хелп как всегда рулит. Вот виписка
Добавим строку
{$L BLOCK.OBJ}
для подлинковки в dcu нужной либы
добавлять нужно гдето в разделе implementation
Также не забыть дать обявления этих функций
procedure MoveWord(var Source, Dest; Count: Integer); external;
реализацию писать не надо, а слово external укажет компилятору, что они потом будут

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 марта 2007, 12:57
Оценка за ответ: 5

Комментарий к оценке: Путь верен, но возникли некоторые другие проблемы...

Ответ #2. Отвечает эксперт: min@y™

В книге С. Тейксейра, К. Пачеко "Delphi 5. Руководство разработчика" есть такие разделы как: "Использование OBJ-файлов C/C++" и "Использование классов C++". Всё с примерами, естественно.

Эта книга есть у меня в виде CHM-файла справки. Могу выслать эти (и любые другие) разделы всем страждущим. Надеюсь, меня не посадят за нарушение авторских прав, ибо не ради наживы, а дабы помочь коллегам. :)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 14 марта 2007, 15:24
Оценка за ответ: 5

Комментарий к оценке: Если не затруднит, то на mvp[sobaka]gala.net. Спасибо

Ответ #3. Отвечает эксперт: ANBsoft

Лет 5 назад у меня была та же задача.
Проще всего оказалось добавить свои делфийские формы в билдеровский проект (он спокойно открывает и добавляет PAS файлы) и компилировать в билдере.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 14 марта 2007, 19:08
Оценка за ответ: 4

Комментарий к оценке: В общем случае Ваш совет подходит, но вопрос не о том. Если в проекте на delphi несколько десятков тысяч строк кода, то не переписывать же их все на Cbuilder ради библиотеки из 1000 строк? P. S. Говорят, что и сам Builder написан на Delphi, как и каждая последующая версия delhi пишется на предыдущей

Ответ #4. Отвечает эксперт: Виталий Лещенко

Здравствуйте, mvp!

Делаешь модуль в котором описываешь все нужные тебе функции с директивой external;

Для того, чтобы линковщих знал откуда их брать пишеш еще {$L test.obj}

И все!

Еще следует обратить внимание на способ передачи параметров и на то, кто очищает стек.
т.е. stdcall, register, cdecl

Ответ отправил: Виталий Лещенко (статус: 4-ый класс)
Время отправки: 14 марта 2007, 21:18

Ответ #5. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, mvp!
Добавлю, что OBJ файлов существует два формата: COFF - используемый Microsoft и OMF - используемый, в основном, Borland. Таким образом, при подключении, скажем OBJ файлов от MASM в Delphi возникают серьезные проблемы. Существуют конвертеры coff2omf и omf2coff, но реально с их помощью невозможно портировать что-то сложнее чем дважды два. Но MASM (и большинство других асемблеров) может выдавать obj файлы и в OMF формате.
Небольшой пример - проигрывание MIDI из памяти (интеграция MASM с DELPHI) см. прикреплённый файл.
С остальными (FASM, TASM, CBuilder, C++ и т.д.) все аналогично.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 14 марта 2007, 23:47


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 15 марта 2007, 00:19; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 14 марта 2007, 16:08 [#1]:

Выслал, не затруднило.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mvp

mvp (статус: 4-ый класс), 14 марта 2007, 20:07 [#2]:

Спасибо, получил - очень познавательно :)
Виталий Лещенко

Виталий Лещенко (статус: 4-ый класс), 14 марта 2007, 21:21 [#3]:

сори за дублированный ответ... я не видет что на этот вопрос уже отвечали...
Виталий Лещенко

Виталий Лещенко (статус: 4-ый класс), 14 марта 2007, 21:25 [#4]:

>Говорят, что и сам Builder написан на Delphi,
>как и каждая последующая версия delhi пишется
>на предыдущей
Скорее всего IDE пишется на той же версии... а не на предыдущей. Хотя бы потому что в каждой IDE используются пакеты текущей версии и ни пред., ни след. не поддерживаются.
ANBsoft

ANBsoft (статус: Студент), 14 марта 2007, 22:14 [#5]:

Насколько я помню, ничего переписывать не нужно, билдер спокойно работает с делфийскими формами, т.е. юниты из делфи можно спокойно подключать (править и отлаживать) в билдере не переписывая с паскаля на си.
ANBsoft

ANBsoft (статус: Студент), 14 марта 2007, 22:17 [#6]:

Еще особое внимание нужно обратить на процедуры и функции использующие String, насколько помню, Си и паскаль работают с ними принципиально по разному (в Делфи даже при создании Dll нужно спец.модуль ShareMem подключать).
mvp

mvp (статус: 4-ый класс), 15 марта 2007, 00:19 [#7]:

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

31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:48
Выполнено за 0.03 сек.