Решила сделать доброе (не бескорыстное) дело, сделать порт Lua в Delphi по аналогии модуля zLib. Т.е. свободного использования скриптового движка без тягания за собой dll. В связи с реализацией, выявила 3 варианта развития: 1) переписать с 0, (прозаично и геморно) 2) загнать dll в ресурс и извращаться с распаковкой в память (быдлокод и реализация через * ) 3) перегнать скомпанованные "Release/*.o" из coff to borland omf Пошла третьим путем. Слила исходники с SF. Собрала Билд Release dll. Далее начала тянуть все *.о файлы. Перегнала все через coff2omf aka [1994 by Walter Oney] После чего попытка бинда. Code: {$L obj\lapi.o} {$L obj\lauxlib.o} {$L obj\lbaselib.o} {$L obj\lcode.o} {$L obj\ldblib.o} {$L obj\ldebug.o} {$L obj\ldo.o} {$L obj\ldump.o} {$L obj\lfunc.o} {$L obj\lgc.o} {$L obj\linit.o} {$L obj\liolib.o} {$L obj\llex.o} {$L obj\lmathlib.o} {$L obj\lmem.o} {$L obj\loslib.o} {$L obj\lopcodes.o} {$L obj\lobject.o} {$L obj\loadlib.o} {$L obj\lparser.o} {$L obj\ltm.o} {$L obj\main.o} В итоге получаем 37 ерроров по не декрарейшен. Code: [Error] lua.dpr(37): Unsatisfied forward or external declaration: '_lua_setfield' [Error] lua.dpr(37): Unsatisfied forward or external declaration: '_lua_yield' ... [Error] lua.dpr(37): Unsatisfied forward or external declaration: '_lua_xmove' [Fatal Error] lua.dpr(37): Compilation terminated; too many errors собственно ручная декларация влечет за собой фактически переписывание, но по всей видимости Omf не съелся как надо и ошибки в перессылках внутри obj. Решила прогнать еще через OMF2D, чтобы наверняка компилятор все это дело скушал, но ничего путевого с этим не вышло, там сдвиги offset`ов при конверте, я так и не поняла что именно он не съел. Сдвигает все правильно. Накопала lua.o lauxlib.o ... в сорцах пакетов под FPC, но они также coff и самое страшное что их не есть coff2omf, точнее после него DCC32 вообще не признает. Как и после дополнительной прогонки через omf2d. И при этом сам пакет опять таки не использует их а просит тягать dll,so,mylib (от платформы) + пыталась гонять через 2010 by Agner Fog objconverter, результат аналогичный. _________________________________ Ну собственно вопрос, как обойти эти грабли, возможно какие то параметры нужно дополнительные ставить в omf2d ? Какие еще есть пути развития ситуации. Запарилась уже брутфорсить, жду советов по кормлению)). Буду рада любым советам.
А в чем была скомпилена DLL ? почему сразу *.o? Это что MinGW компилятор чтоли? В большенстве случаев надо просто скомпилить в MS компиляторах и врать obj файлы А также зависит от того как именно были определены прототипы функций. Возможно просто когда делаешь DLL надо убрать что они экспортируются. А просто компилить как обычные функции. и В делфяных прототипах функций описать что это обычные функции stdcall а не экспортируемые откуданить
да, сижу под CodeBlocks и под вин и под Kubunty всегда думала что VS создает Coff а Delphi есть только свой OMF, со 2 версии не есть даже интеловский. "MYCFLAGS=-DLUA_BUILD_AS_DLL" через #define LUA_API __declspec(dllexport) Code: Возможно просто когда делаешь DLL надо убрать что они экспортируются. я конечно попробую, но банальный example под Library с экспортом сознает нормальный obj (*.о) и далее методом шаманства coff2omf > omf2d > {$L 'name'*.o} цепляется в Delphi и вызывается; Code: и В делфяных прототипах функций описать что это обычные функции stdcall так и сделано, но до прототипов еще не доходит
дело не в версии и не в компиляторе MSVS или MinGW, проверила. Также не в експорте, тоже проверенно, походу при конвертации из-за offseta происходят сдвиги. Чтож качаю Ида, придется смотреть перессылки друг на друга внутри объектников, мож он имена правит... Узнаю правда попробую рассказать.