Новый редактор Bif и Lbm - Страница 2 - Моды на MTW и STW - TWoW.Games - Сообщество любителей умных игр Перейти к содержанию
TWoW.Games - Сообщество любителей умных игр

Новый редактор Bif и Lbm


Sturm LS

Рекомендуемые сообщения

2 Engineer:

Sturm LS - если С-билдер это может, то попробуешь для Delphi объектники тоже выложить?

 

Я этим никогда не занимался (не было необходимости), а сегодня "полазил" по форумам Builder'а и Delphi - вроде бы, говорят, что это невозможно...

 

 

2 All:

Если кто знает как с этим справиться - поделитесь.

Ссылка на комментарий
  • Ответов 121
  • Создана
  • Последний ответ

Топ авторов темы

  • AlexRaven

    6

  • Engineer

    36

  • Chernish

    8

  • Sturm LS

    55

Топ авторов темы

2 Sturm LS:

Я этим никогда не занимался (не было необходимости), а сегодня "полазил" по форумам Builder'а и Delphi - вроде бы, говорят, что это невозможно...

2 All:

Если кто знает как с этим справиться - поделитесь.

Ну как так невозможно? Я же делал уже нечто подобное. Вообще то, я полагал что обьявления интерфейса компонент должно быть в самой bpl-ке, но если уж её не хватает, то ругань компилятора на отсутствие DCU означает всего лишь необходимость перевода соответствующих Си-шных файлов заголовков (*.h) на паскаль, с последующей генерацией из них DCU. Этого вполне достаточно и я так уже делал. В нашем случае, как я понимаю, достаточно перевести и сделать паскалевские файлы: BIFImage.h, LBMImage.h и DDFListBox.h. Могу по твоим исходникам и попробовать сделать такой перевод. Мне, правда, несколько не хватает знания С++ синтаксиса, но всё же попробую. Структуры вроде уже перевел, сейчас с декларациями всех этих указателей разбираюсь. О результате сообщу дополнительно, а может Kirill меня обгонит...

 

Конечно можно использовать и прямо продекларированную DLL, но в этом случае есть трудности с импортом классов, мы сможем пользоваться только вызовом конкретных функций, так что изготовить новые хедеры - это правильный путь. B)

Ссылка на комментарий

2 Kirill:

2 Engineer:

Обгоню, когда исходники у меня будут  Может быть

 

Давно бы были, :( но у меня форум глючит, а по твоему старому майлу не прошодит, что-то.... Давай сюда свой майл текстом, ладно?

Ссылка на комментарий
2 Engineer:

Обгоню, когда исходники у меня будут :) Может быть :(

2 Kirill:

Ладно, не дождался твоего майла или это у меня глюки, так что, с любезного разрешения автора (Sturm LS), выкладываю исходники прямо тут. Потом перенесу их в статью про инструменты.

 

Докладываю ещё и свою заготовку перевода BifImage.pas, - много я чего ещё не успел, но канва вроде есть. Или ты по новой станешь переделывать?

Короче, сделаешь правильные заголовки, загрузи их сюда же, пожалуйста, тогда проверим и в статейной по моддингу-инструменты опубликуем готовые компоненты и исходники автора отдельно.

Bif_Lbm.zip

Ссылка на комментарий

2 Engineer:

Ну как так невозможно?

 

Просто я пробежался, по быстрому, по форумам - там на вопросы типа: как использовать С++ исходники в Delphi, ответ один - переписать. В Builder'е, все "облазил" - нет возможности сделать dcu. Я в Delphi, непосредствено, не работал - поэтому не знаю. Если ты говоришь, что это сделать можно - значит так и есть.

Мне, правда, несколько не хватает знания С++ синтаксиса, но всё же попробую.

 

Если что, поможем.

Ссылка на комментарий

2 Sturm LS:

там на вопросы типа: как использовать С++ исходники в Delphi, ответ один - переписать.

Вообще то есть готовый конвертор исходников С++ в Дельфи от сайта Dr.Bob. Неплохой, хотя и шибко путаный. В качестве подстрочника можно использовать. Я как то перевордил в Дельфи одну промышленную библиотечку, - помучился изрядно, но всё стабильно заработало. Хотя в С++ есть некоторые конструкции не переводимые принципиально, - те же переопределяемые для разных значений константы, например.

:rolleyes: Думаю Kirill быстрее переведет заголовки файлов, у него С-шная практика видать куда больше моей. А тогда и документации другой не надо, - все вызовы как на ладони.

 

А в Дельфях можно готовить сатндартные DCU, объектники С или С++ - это задается в опциях линкера проекта, так что обратная совместимость всяко уже есть.

{

Linker output

_______________________________________

Specifies the output from the linker.

_______________________________________

Option Effect

_______________________________________

Generate DCUs Output standard Delphi DCU format files.

Generate C object files Create a C object file for linking with a C program (no name mangling).

Generate C++ object files Create a C++ object file for linking with C++ (uses C++ name mangling).

Include namespaces Puts information into namespaces and mangles the namespace (the name of the unit) into the symbol. This must be checked if sharing code with C++. (This option is enabled if Generate C++ object files is checked.)

Export all symbols Creates dynamically linkable exports for exported functions in the project. It is for use when generating object files for packages that will be linked into C++ applications. (This option is enabled if Generate C++ object files is checked.

}

 

Можно, насколько я знаю и прицепить к проекту Дельфи объектник стандартного формата, просто указав его:

{

The $L parameter instructs the compiler to link the named file with the program or unit being compiled. The $L directive is used to link with code written in other languages for procedures and functions declared to be external. The named file must be an Intel relocatable object file (.OBJ file). The default extension for filename is .OBJ. If filename does not specify a directory path, then, in addition to searching for the file in the same directory as the current module, Delphi searches in the directories specified in the Search path input box on the Directories/Conditionals page of the Project|Options dialog box (or in the directories specified in the -O option on the DCC32 command line).

}

Хотя этот способ я не пробовал.

Ссылка на комментарий

2 Engineer:

 

В общем, пробежался я еще раз по Builder'у - возможности сделать dcu не нашел. "Компиленные обектники" лежат в архиве - можешь попробовать их "слинковать".

Ссылка на комментарий
2 Engineer:

 

В общем, пробежался я еще раз по Builder'у - возможности сделать dcu не нашел. "Компиленные обектники" лежат в архиве - можешь попробовать их "слинковать".

2Sturm LS:

******************************************

Жаль, но дело не в этом. Я разумеется пробовал их подлинковать сразу же. Проблема в том что для Delphi все эти Си-шные имена и декларации с "собачками", "волнами" и прочим мусором в названиях функций не годятся. То есть объектник линкуется, а на имена начинает ругаться. Может я просто не разобрался, но у меня так и не вышло.

Поэтому, скорее всего, придется действительно переписывать заголовки библиотеки твоих компонентов, - надеюсь у Kirilla на будет с этим проблем.

 

А пока я выкладываю заголовочный файл Дельфей в комплекте с твоим dll-м, - пользуйтесь господа пока хоть этим. Если откомментируешь эти вызовы или хотя бы укажешь вместо моих безликих "arg#" осмысленные имена аргументов, можно будет нормально пользоваться пока хоть твоей dll-кой. Вроде и так понятно, но вопросы всё же есть.

BIF_DLL.zip

Ссылка на комментарий

2 Kirill:

2 Engineer:

Да вот винт только-только поменял, таr что... то же самое

Ага, ну ладно. Я вот хедер к dll-ке вроде сделал, а к обьектникам компонента только заготовку начал, - она там и лежит, не успел ещё даже вызовы потипам на указатели поменять. Если успеешь раньше меня, клади всё сюда. Шибко охота редактор доделать с картинками.

Ссылка на комментарий
  • 1 месяц спустя...

Господа, у меня вопрос по поводу конвертора и просмотрщика MedConstrKit, сделанного Sturm LSом. По омему это лучшая фича, которую я на сайте видел и для работы с Bifами и с Lbsами. Но есть у нее один прикол - эта программа неуклонно приращивает файлы подкачки при просмотре анимации.... у мине на машине гектар оперативы и эта програмка, будучи единственно запущеной за 10 менут повергла машину в шок...Вы этого не замечали у себя ? Решена ли эта проблема ? (нет, можно конечно ее просто закрывать и открывать заново при достижении критического арзмера файлов.., но это же не решение, тем более, что я думаю там ничего сложного... просто автор в цыкле забыл чень-ть выгрузить.... )Sturm LS, ваши комментарии ? и будит ли продолжение с новыми удобными фичами ?(например отображение привьюшек, дерева каталогов)

Ссылка на комментарий

2 Ronin:

Я ее постоянно юзаю, ничего такого не замечал. 256 метров оперативки, 1 гиг кэша на винте (жестко задан)... При этом одновременно еще и фотошоп, да еще и Медиевал (гама в смысле)... винда ХР... хотя и на МЕ все ништяк было.

Ссылка на комментарий
Я ее постоянно юзаю, ничего такого не замечал. 256 метров оперативки, 1 гиг кэша на винте (жестко задан)... При этом одновременно еще и фотошоп, да еще и Медиевал (гама в смысле)... винда ХР... хотя и на МЕ все ништяк было.

Все тоже , только 512DDR , более минуты задержек не бывает :blink: И то это при работе с огромными картами :blink:

Ссылка на комментарий

2 Ronin:

Господа, у меня вопрос по поводу конвертора и просмотрщика MedConstrKit, сделанного Sturm LSом. По моему это лучшая фича, которую я на сайте видел и для работы с Bifами и с Lbsами.

 

Спасибо, я старался, что бы было удобно.

Но есть у нее один прикол - эта программа неуклонно приращивает файлы подкачки при просмотре анимации.... у мине на машине гектар оперативы и эта програмка, будучи единственно запущеной за 10 менут повергла машину в шок...

 

С этого момента можно по подробнее (что за ситуация, что запущенно, что за OS, что за "железо")?

Вы этого не замечали у себя ?

 

Нет, ни разу. Был другой момент, но выловить его не удалось, а пользователи не сообщали.

Решена ли эта проблема ? (нет, можно конечно ее просто закрывать и открывать заново при достижении критического арзмера файлов.., но это же не решение, тем более, что я думаю там ничего сложного... просто автор в цыкле забыл чень-ть выгрузить.... )

 

Как только проясним ситуацию (см. выше), посмотрим, что можно сделать.

Sturm LS, ваши комментарии ?

 

Да все, в общем то, просто. Программа считывает весь файл в память, разбивая его на часть (заголовок, палитра, массив адресов кадров, каждый кадр в отдельности). При этом, объем занимаемой памяти чуть больше, чем размер считываемого файла. При открытии кадра, его "тело" декодируется и помещается в созданный в памяти BMP-файл, который отображается в окне. При открытии следующего кадра, BMP-файл стирается и создается опять. Так как все операции производятся в памяти - то, теоретически, память может "захламляться". Однако при неоднократном просмотре файлов игры (даже "монструозных" - Epic.BIF, 100monsl.BIF, 100monsr.BIF, StandMon.BIF, LUKUPMAP2.LBM и т.п.), ни каких проблем с памятью и "свопом" не замеченно.

... и будит ли продолжение с новыми удобными фичами ?(например отображение привьюшек, дерева каталогов)

 

И с этого момента, если можно, по конкретнее. Я уже писал:

Как наберем необходимых функций - напишу новую версию редактора

Так что, поясни свои мысли, а за нами - не заржавеет!

Ссылка на комментарий

в кратце - запускал прогу и на "чистой" машине и с запущеными приложениями(Мах, фотошоп) на двух системах - ХР профэшнл и ХР шоум эдишн. Системы - 1га оперативы ддр 400 и 256ддр, камени атлон 2.5 и атлон 1.6...

- результат адин и тот же. При запуске порграммы - усе нормально, при порсмотре картинок - тоже. НО когда я начинаю порсматривать анимации (запускаю на проигрывание например 12 кадров бифа) за каждый цыкл проигрывания файлы подкачки приростают на 2 метра...Очищаютса толлько при выключении программы...

Можитт ты таки забыл очистить память в цыкле просмотрщика ?

 

а по поводу того, чего еще хателось бы - так это было бы не плохо в просмотрщике лазание по директориям сделать в виде стандартного дерева... ато пути не видно... -но в принцыпе мы - люди порсты е и так юзаем с благодарностью.... ) еще бы хотелось бы иметь возможность видеть привьюшки файлов (как это сделано в папках винды )

Ссылка на комментарий

2 Ronin:

в кратце - запускал прогу и на "чистой" машине и с запущеными приложениями(Мах, фотошоп) на двух системах - ХР профэшнл и ХР шоум эдишн. Системы - 1га оперативы ддр 400 и 256ддр, камени атлон 2.5 и атлон 1.6...

- результат адин и тот же. При запуске порграммы - усе нормально, при порсмотре картинок - тоже. НО когда я начинаю порсматривать анимации (запускаю на проигрывание например 12 кадров бифа) за каждый цыкл проигрывания файлы подкачки приростают на 2 метра...Очищаютса толлько при выключении программы...

 

Так. Картины это не прояснило :blink: . Что интересно, анимация - это последовательный перебор кадров. Это тоже самое что и просмотр отдельных картинок. С XP не пробывал, работаю под 2000 AS - ничего подобного, ни разу не видел :unsure: .

Можитт ты таки забыл очистить память в цыкле просмотрщика ?

 

Тогда бы, и при просмотре отдельных картинок было бы тоже самое, но ты пишешь - что это не так!

а по поводу того, чего еще хателось бы - так это было бы не плохо в просмотрщике лазание по директориям сделать в виде стандартного дерева... ато пути не видно... -но в принцыпе мы - люди порсты е и так юзаем с благодарностью.... )

 

Ну, тут просто все зависит от предпочтений: я больше люблю интерфейс наподобии commander'ов (NC, DN, VC, WC, TC), а ты, видимо, explorer'а.

Переделать интерфейс, конечно можно, но на работоспособность программы это не повлияет. Впрочем, если это действительно так важно для тебя, можно и сделать (типа специал едишан) :) .

еще бы хотелось бы иметь возможность видеть привьюшки файлов (как это сделано в папках винды )

 

Тут тоже все просто - чтобы показать "превьюхи", нужно просканировать все файлы (подходящих типов), каждый открыть, считать и декодировать первый кадр (или единственный), сохранить его где-то (в памяти или на диске). В итоге: падение, и так не очень большой, скорости; затраты ресурсов. Получается, что зайдя в директорию MTW//Textures//campmap//, ты ждешь минут 30 (самое меньшее), чтобы увидеть "превьюхи" карты (во всех разрешениях), только для того, чтобы зайти в поддиректорию MTW//Textures//campmap//Castleflags// и посмотреть флаги замков. Согласись не очень продуктивно :) .

 

Не подумай, что я омазываюсь или хаю твои идеи :D . Вовсе нет! Я действительно хочу, чтобы программа была удобна и тебе, просто кое-что помимо видимого удобства, несет в себе и ненужные затраты. (О "превьюхах" я и сам думал, но по здравому размышлению - отказался)

Ссылка на комментарий
Я действительно хочу, чтобы программа была удобна и тебе, просто кое-что помимо видимого удобства, несет в себе и ненужные затраты. (О "превьюхах" я и сам думал, но по здравому размышлению - отказался)

Ну, скажем, чекбоксик "превью" и просмотр одного только выбраного файла не слишком бы дело затормозил. Хотя, конечно, карта так будет листаться минут надцать....

Ссылка на комментарий

2 Engineer:

Ну, скажем, чекбоксик "превью" и просмотр одного только выбраного файла не слишком бы дело затормозил. Хотя, конечно, карта так будет листаться минут надцать....

 

Хорошо, не будем друг друга уговаривать. Скажите где, в интерфейсе программы (в каком окне, в каком месте окна), вы хотите видеть "превью", и предложите тех. реализацию (как включать - чекбоксом или как; где хранить - в памяти или на диске). А мне сделать не сложно, просто я в этом необходимости не увидел.

Ссылка на комментарий
Впрочем, если это действительно так важно для тебя, можно и сделать (типа специал едишан)

упаси Господь! я и так схаваю! не стоит трудов )))

Ссылка на комментарий

2 Engineer:

Ну как так невозможно? Я же делал уже нечто подобное. Вообще то, я полагал что обьявления интерфейса компонент должно быть в самой bpl-ке, но если уж её не хватает, то ругань компилятора на отсутствие DCU означает всего лишь необходимость перевода соответствующих Си-шных файлов заголовков (*.h) на паскаль, с последующей генерацией из них DCU. Этого вполне достаточно и я так уже делал. В нашем случае, как я понимаю, достаточно перевести и сделать паскалевские файлы: BIFImage.h, LBMImage.h и DDFListBox.h.

Жаль, но дело не в этом. Я разумеется пробовал их подлинковать сразу же. Проблема в том что для Delphi все эти Си-шные имена и декларации с "собачками", "волнами" и прочим мусором в названиях функций не годятся. То есть объектник линкуется, а на имена начинает ругаться. Может я просто не разобрался, но у меня так и не вышло.

Поэтому, скорее всего, придется действительно переписывать заголовки библиотеки твоих компонентов

 

Может чего присоветуешь: Напоролся на следующую проблему -

заголовок с обявлением класса пререписал на Pascal,

при компиляции ругается на отсутствие реализации методов,

сделал обьявление методов как export,

ругается на отсутсвие методов в export,

сделал обьявление методов как export "my.bpl",

ругается на отсутсвие функции такой-то в my.bpl,

сделал обьявление методов как export "my.bpl" name "функция такая-то" (взяв экспортную декларацию С++),

все свойства/методы видятся (в CodeGuard), все компилируется, при попытке обращения к свойствам не унаследованным вылетает с ошибкой доступа в память (все унаследованные и не переопределенные свойства вполне работают).

Запарился, ничего не понимаю, но не сдамся!!!

Буду еще чего-нибудь пробывать - НУ НИ МОЖЕТ ОНО БЫТЬ СОВСЕМ НЕ СОВМЕСТИМЫМ!

Ссылка на комментарий
  • 1 месяц спустя...

2 Sturm LS:

Оппаньки. Пропустил твоё сообщение :(.

Я вообще то делал так. Сперва Delphi-йским tdump.exe смотрел на конкретную DLL-ку чтобы определить имена функций и синтаксис вызова. Получаем нечто вроде:

Exports from Bif.dll

  22 exported name(s), 22 export addresse(s).  Ordinal base is 1.

  Sorted by Name:

    RVA      Ord. Hint Name

    -------- ---- ---- ----

    00003838  12 0000 __fastcall EndianSwapL(long *)

    0000385C  13 0001 __fastcall EndianSwapW(unsigned short *)

 

Потом писал новый хедер для вызова функций из дельфей. Сначала всякие приведения типов, указательные типы для использования в сишных вызовах, и сами функции. Что-то вроде:

  function HdaAddNtf(hg: Longint;var ht: Longint; ntf: PChar): Longint; stdcall; external 'fixtools.dll' name 'HdaAddNtf@12';

или вот, попроще как:

var eda_query_item_size: function(gnum: GNUM; t: THANDLE): INT16; cdecl;

Всё обячно работало. Ну разве что где-нибудь СИшный синтаксис не переводится или имя процедуры не то.

 

заголовок с обявлением класса пререписал на Pascal,

Ну да, и включил его в проект Дельфей - всё так.

 

сделал обьявление методов как export,

ругается на отсутсвие методов в export,

А name по своей DLL-ке или обьектнику правильные сделал?

 

сделал обьявление методов как export "my.bpl" name "функция такая-то" (взяв экспортную декларацию С++),

все свойства/методы видятся (в CodeGuard), все компилируется, при попытке обращения к свойствам не унаследованным вылетает с ошибкой доступа в память

Ага, значит вот в чём дело было. :( Хм. Что-то проскакивало такое, но уже не помню. Пойду пороюсь, может найду чего. В именах и типах, говоришь, всё соответствует, - нет ошибок?

Ссылка на комментарий

2 Engineer:

Там все еще злее - Делаю dll'ку, куда пихаю форму с Bif-компонентом, в dll'ке пишу экспортную функцию, которая получает имя файла-bif, имя файла-bmp, номер кадра, считывает нужный кадр файла-bif, пишет его в файл-bmp. В Дельфи подключаю, проект нормально собирается, при запуске выдает внутреннюю ошибку, работает, записывает bmp'хи, при закрытии приложение вываливается в отладчик Дельфи. При запуске приложения не из Дельфи, сразу вываливается в отладчик по умолчанию.

Я в шоке!

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×
×
  • Создать...

Важная информация

Политика конфиденциальности Политика конфиденциальности.