Форум » [x]Harbour » Как разобрать OBJ файл ? » Ответить

Как разобрать OBJ файл ?

Uncle_ed: В библиотеку hbct.lib вошли не все функции из клипперного варианта. Вот захотелось мне что бы не писать недостающие функции самому вытащить их из старой библиотеки. Нужный OBJ файл вытащил конечно. А вот как его разобрать на исходники ? Разные valkirie и rescue требуют непременно EXEшники.

Ответов - 16

Dima: Uncle_ed пишет: Разные valkirie и rescue требуют непременно EXEшники Собери простой EXE и слинкуй (RTLINK) его с вытащенными OBJ :) А каких функций не хватает в CT ?

Петр: Uncle_ed пишет: А вот как его разобрать на исходники ? Разные valkirie и rescue требуют непременно EXEшники. Оригинальная CT на asm- е написана. Чем вам валькирия поможет - не знаю. Вы лучше список недостающих функций выложите - может и подскажут, что и чем лучше заменить.

Uncle_ed: Ну например, Tempfile() Это первое с чем столкнулся. Конечно написать ее не проблема, но хотелось бы ближе к оригиналу иметь. Думаю есть и другие нерелизованые функции. Вытащил файл tempfile.prg из исходников библиотеки libfn от xharbour и тупо его прилинковать, но ide все равно говорит, что нет _HB_FUN_TEMPFILE Т.е. его все равно нужно сначала адаптировать под Harbour.


Петр: Tempfile - это случай, когда разработчики неявно подталкивают к использованию встроенных функций (а не к смене компилятора ), которые могут быть использованы на любой поддерживаемой платформе. И о Tempfile на форуме уже писалось. [pre2]PROCEDURE Main LOCAL cTempFile := TempFileName() ? cTempFile FErase( cTempFile ) RETURN FUNCTION TempFileName() LOCAL nFileHandle LOCAL cFileName nFileHandle := HB_FTempCreate( ,,, @cFileName ) IF nFileHandle > 0 FClose( nFileHandle ) ENDIF RETURN cFileName [/pre2]

Петр: А еще есть hb_dbCreateTemp, функция аналог dbCreat. dbf-ка созданная hb_dbCreateTemp будет удалена автоматически после закрытия.

Uncle_ed: Спасибо - функция прокатила. Только вопрос - с чем связано ее имя TempFileName вместо TempFile ? Это принципиальная разница ?

Наиль: FileName - используется для обозначения строковых переменных, которые содержат путь к файлу File - используется для обозначения переменных, которые содержат связь с объектом файла, и позволяют выполнять действия чтения/записи из/в файл. В данном случае TempFileName - не соответствует логике указанной функции.

Петр: Uncle_ed пишет: Только вопрос - с чем связано ее имя TempFileName вместо TempFile ? Это принципиальная разница ? TempFileName - в данном случае пользовательская функция, вы можете присвоить ей имя TempFileName, GetTempFileName или даже более понятное qwerty_tmp007. В данном случае принципиальным является использование встроенной функции языка hb_fTempCreate(...)

Петр: Наиль пишет: В данном случае TempFileName - не соответствует логике указанной функции. А что по вашему возвращает TempFileName?

Uncle_ed: Петр Я просто переименовал ее в tempfile для того чтобы не переделывать свои исходники. Чем это чревато ?

Dima: Uncle_ed пишет: Чем это чревато ? Ни чем.

Uncle_ed: Вот и я так думаю. Зачем тогда имя другое давать ? Спасибо

Pasha: Сегодня вечером добавлю TempFile() в xHarbour Если есть желание - гляньте на совместимость этой функции с ct А то получается вопрос небольшой, а шума много. [pre]#include "set.ch" Function TempFile(cDir, cExt, nAttr) LOCAL nFileHandle LOCAL cFileName, cNewName LOCAL nAt, cSep IF cDir == nil cDir := CurDirX() ENDIF nFileHandle := HB_FTempCreate(cDir,, nAttr, @cFileName ) IF nFileHandle > 0 FClose( nFileHandle ) nAt := Rat(".", cFileName) cSep := Set(_SET_DIRSEPARATOR) IF nAt != 0 .and. Rat(cSep, cFileName) > nAt nAt := 0 ENDIF IF cExt != nil cNewName := if(nAt==0, cFileName, Left(cFileName, nAt - 1)) + "." + cExt ELSEIF nAt != 0 cNewName := Left(cFileName, nAt - 1) ENDIF IF ! Empty(cNewName) .and. FRENAME(cFileName, cNewName) != -1 cFileName := cNewName ENDIF IF (nAt := Rat(cSep, cFileName)) != 0 cFileName := Substr(cFileName, nAt + 1) ENDIF ENDIF Return cFileName[/pre]

Uncle_ed: протестировал - не получилось Error: Unresolved external '_HB_FUN_CURDIRX' referenced from C:\MINIGUI\IDE\SAMPLES\PROBA\OBJ\PROBA.OBJ где эта функция сидит ? Вот если на CurDir() заменить , то работатет. Очепятка ?

Петр: Uncle_ed пишет: Очепятка ? Нет. xHarbour расширение. Вариант для Harbour. Со вчерашнего дня в SVN [pre2]/* * $Id: tempfile.prg 14395 2010-04-26 18:49:38Z vszakats $ */ #include "common.ch" #include "fileio.ch" FUNCTION TempFile( cDir, cExt, nAttr ) LOCAL cName LOCAL fhnd IF ISCHARACTER( cExt ) .AND. !( Left( cExt, 1 ) == "." ) cExt := "." + cExt ENDIF fhnd := hb_FTempCreateEx( @cName, cDir,, cExt, nAttr ) IF fhnd != F_ERROR FClose( fhnd ) RETURN cName ENDIF RETURN "" [/pre2]

Uncle_ed: Воткнул, протестировал всяко разно как мог - вроде бы работает нормально. Спасибо.



полная версия страницы