Формат OMF в формат COFF
Есть ли такой инструмент, как Borland "coff2omf.exe" для преобразования формата Borland OMF LIB в формат MS VC++ COFF LIB?
на самом деле я хочу создать файл.obj в Delphi и использовать его в MSVC++ .
2 ответа
Насколько я знаю, такого инструмента нет. Используя конвертер объектных файлов Agner Fog, инструмент, на который ссылается Арно, мне никогда не удавалось преобразовать модуль Delphi в COFF .obj, который можно связать с программой MSVC.
Я считаю, что нереально взять исходный код Delphi, скомпилировать его, а затем использовать сгенерированный объект в MSVC. Другое направление вполне возможно. Вы можете скомпилировать код C в объект и связать этот объект с исполняемым файлом Delphi. Когда вы делаете это, вам нужно разрешить все зависимости, которые есть у скомпилированного объекта.
Но для того, чтобы связать объект Delphi с программой на C/C++, потребуется любая часть Delphi RTL, которую вы используете. И это будет сложно, если только вы не используете какую-либо часть Delphi RTL, что кажется маловероятным.
В вашей ситуации я думаю, что ваши варианты:
- Портируйте код на C или C++.
- Скомпилируйте код Delphi в динамическую библиотеку и создайте ссылку на него из вашей программы на C++.
Да, такой инструмент есть.
Смотрите этот инструмент.
Эта утилита может использоваться для преобразования объектных файлов между форматами COFF/PE, OMF, ELF и Mach-O для всех 32-разрядных и 64-разрядных платформ x86. Может изменять имена символов в объектных файлах. Может создавать, изменять и конвертировать библиотеки функций на разных платформах. Может дамп объектных файлов и исполняемых файлов. Также включает в себя очень хороший дизассемблер, поддерживающий наборы инструкций SSE4, AVX, AVX2, FMA и XOP. Исходный код включен (GPL). Руководство.
Обратите внимание, что этот http://www.agner.org/ веб-сайт - лучший ресурс, который я знаю о низкоуровневой оптимизации. Вся связанная информация стоит прочитать, если вы хотите иметь дело с производительностью.
Но для использования Delphi-генерируется .obj
с VC++ это не будет легко выполнимо, но для очень маленькой части кода. Вам понадобится Delphi RTL, используемый в вашем коде. Внешний .dll
намного лучше. Также обратите внимание, что некоторые типы (например, строки или динамические массивы) не будут легко модифицируемыми в VC++.