|
Вопрос # 406/ вопрос решён / |
|
Как к Delphi прицепить С-ный lib-файл? Поясню: есть библиотека (в исходниках) откомпилированная CBuilder (т. е. obj-файлы доступны). Нужно её прицепить к проекту на Delphi, но dll использовать нельзя. Спасибо
 |
Вопрос задал: 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 дней с момента отправки ответа)
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 15 марта 2007, 00:19; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 14 марта 2007, 16:08 [#1]:
Выслал, не затруднило.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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 (статус: Студент), 14 марта 2007, 22:14 [#5]:
Насколько я помню, ничего переписывать не нужно, билдер спокойно работает с делфийскими формами, т.е. юниты из делфи можно спокойно подключать (править и отлаживать) в билдере не переписывая с паскаля на си.
|
|
ANBsoft (статус: Студент), 14 марта 2007, 22:17 [#6]:
Еще особое внимание нужно обратить на процедуры и функции использующие String, насколько помню, Си и паскаль работают с ними принципиально по разному (в Делфи даже при создании Dll нужно спец.модуль ShareMem подключать).
|
|
mvp (статус: 4-ый класс), 15 марта 2007, 00:19 [#7]:
Нет, это уже будет перебор на билдере компилить, хотя он действительно дельфийские файлы понимает
|
31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|