Добрый день. Вот попался хороший исходник, написанный на masm32 — это lib библиотека с исходниками, поэтому есть и .OBJ. Хотел использовать ее в своих Delphi программах.
Взял .OBJ и подключил директивой $L — при компиляции выдается ошибка:
[Error] uFMOD.pas(9): Bad object file format: '...\hipnose.obj'
Help говорит, что нужно использовать 32 (т.е. Coff) формат, но я уже как только не компилировал — все равно ничего не получается. Я даже пытался туда .LIB впихнуть.
В то же время у меня есть исходник на Delphi, который использует .OBJ файлы, сделанные в TMT Pascal'е. Исходников самих .OBJ файлов нету, но насколько я могу судить по внешнему виду — они 16 битные, но Delphi их благополучно принимает.
Подскажите как использовать .OBJ или .LIB файлы в Delphi.
<skipped>
W>Подскажите как использовать .OBJ или .LIB файлы в Delphi.
Ему нужен 32-битный OMF формат. Могу ошибаться, но вроде бы какие-то версии masm32 позволяют получить его, если не указывать ключ /coff. Также можно попробовать утилиту coff2omf из состава C++ Builder или что-то аналогичное по назначению.
А .lib, по-моему, вообще никаким боком не лезет
Re[2]: Использование .OBJ файлов от masm32 в Delphi
Здравствуйте, Sergei I. Gorelkin
SIG>Ему нужен 32-битный OMF формат. Могу ошибаться, но вроде бы какие-то версии masm32 позволяют получить его, если не указывать ключ /coff. Также можно попробовать утилиту coff2omf из состава C++ Builder или что-то аналогичное по назначению. SIG>А .lib, по-моему, вообще никаким боком не лезет
На счет OFM я тоже уже узнал. Но Delphi мой masm32 все-равно не понимает, какие бы ключи я не устанавливал.
Пожалуйста вышлите мне (wyfinger@bluebottle.com) утилитку coff2omf — что-то найти не могу, а CBuilder'a сейчас нет. Очень Жду.
<< wyfinger@bluebottle.com >>
Re[3]: Использование .OBJ файлов от masm32 в Delphi
Здравствуйте, Wyfinger, Вы писали:
W>Пожалуйста вышлите мне (wyfinger@bluebottle.com) утилитку coff2omf — что-то найти не могу, а CBuilder'a сейчас нет. Очень Жду.
Этот файл есть в Delphi 2006.
Re[4]: Использование .OBJ файлов от masm32 в Delphi
1) Delphi понимает OMF объектные файлы, да и то с некоторыми ограничениями.
2) Существует утилита coff2omf (входит в поставку CBuilder'а), но она в моем конкретном случае не помогла.
Если кому интерестно, я хотел использовать в Delphi объектные файлы библиотеки FMOD, для проигрывания XM музыки. В итоге было найдено готовое решение для портирования библиотеки в Delphi — там просто использовалась другая версия библиотеки — без использования BSS сегмента.
Разрешите внести некоторые уточнения:
W>1) Delphi понимает OMF объектные файлы, да и то с некоторыми ограничениями.
Ограничений, в основном, 3 штуки:
Вызовы функций через импорт в Delphi сводятся к формату "call [jmp адрес]". Если в объектнике указан просто "call адрес", компилятор Delphi выдаст ошибку.
Имена импортируемых функций не должны содержать декорации (типа _imp__имя@N), за исключением борландовского формата.
Фиксапы (записи FIXUPP) должны быть исключительно 5-байтными.
Есть ещё ограничения на имена секций, TLS и т.д. Тем не менее, в большинстве случаев достаточно иметь в виду лишь те 3 вышеописанных ограничения, чтобы получить работоспособный OMF-объектник без использования сторонних утилит.
Рекомендую взглянуть на документацию и исходники утилиты OMF2D by EliCZ.
W>2) Существует утилита coff2omf (входит в поставку CBuilder'а), но она в моем конкретном случае не помогла.
Борландовская утилита годится лишь для конвертирования импорта. Для конвертирования обычных объектников она непригодна. Зато есть coff2omf от товарища Walter Oney, которую можно бесплатно скачать вместе с пакетом утилит от Digital Mars или же с сайта wasm.ru. К сожалению, утилита не безглючна Лично я предпочитаю генерировать OMF с помощью бесплатного борландовского компилятора C++ или же masm32 (без ключа /coff, как кто-то верно подметил).
W>Если кому интерестно, я хотел использовать в Delphi объектные файлы библиотеки FMOD, для проигрывания XM музыки. В итоге было найдено готовое решение для портирования библиотеки в Delphi — там просто использовалась другая версия библиотеки — без использования BSS сегмента.
Использование BSS не влияет на успех конвертирования объектника в формат OMF для Delphi. К примеру, библиотека uFMOD уже портирована в этот формат, хотя и использует очень активно BSS. Если кому-то интересно получить этот билд uFMOD до официального релиза, обращайтесь на мыло вашего покорного слуги