| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |