Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт окт 19, 2017 6:44 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 14 сообщений ] 
Автор Сообщение
 Заголовок сообщения: использование libs-dev в KlbrInWin
СообщениеДобавлено: Чт июн 18, 2009 8:56 am 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
Собственно написал пару простых программок для КОС, работают, тестировал в KlbrInWin.
Захотелось поюзать libs-dev, тут возник вопрос -
как настроить KlbrInWin? Создал папку disk, в ней hd0, в поле ramdisk указал c:\.......\disk\
создал 1 раздел /hd0/1 , путь c:\.......\disk\hd0\ , бросил туда папку sys\lib с libjfx.obj libio.obj libinit.obj, скомпилил libs-dev\.test\001\test001.asm, но он не запускается (наверное запускается, просто выходит, посмотрев в код, сделала вывод, что не проходит stdcall dll.Load,@IMPORT, значит у меня где-то в путях косяк, или в настройках). В общем как собрать и запустить пример, юзающий либы?


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Чт июн 18, 2009 9:17 am 
Hydra
Как вариант возможно из-за этого:
viewtopic.php?f=8&t=1279
А вообще вот мой INI
Вложение:
KlbrInWin_INI.7z [1.33 КБ]
82 скачивания

Код:
RamDisk=C:\My\kolibri\progs\

В папке progs разместил содержимое IMG файла. Да и системные библиотеки размещаются в папке LIB, а не в sys\lib. /SYS/ это просто обозначение вместо /RD/1/, потому что планировалось сделать работу без рамдиска.


Вернуться к началу
   
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Чт июн 18, 2009 9:45 am 
Не в сети
Kernel Optimizer
Аватара пользователя

Зарегистрирован: Пн янв 16, 2006 7:58 pm
Сообщения: 657
Hydra
Очень хорошим примером для тебя будет, если ты посмотришь как работают программы использующие библиотеку load_lib.obj, или же ты сам(а) будет использовать макрос load_lib.mac - если либа не найдена или с импортом косяк, - тебе наглядно это отобразиться. (примеры использования RUN, scrshoot, примеры к библиотеке box_lib.obj, RDSAVE и др.)


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 7:59 am 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
Разобрался с либами, спасибо. Как водится, на смену старой проблеме пришла новая, возникает исключение при вызове img.decode, выдрал кусок кода из kiv'a, тестил все до невозможности, файл открывается, считывается, правильно узнается его размер (даже вывел на экран размер и сам файл), но исключение вылезает как раз при вызове img.decode
код следующий
smfn - имя файла
Код:
   and   [img_data], 0
   invoke   file.open, smfn, O_READ
   or   eax, eax
   jz   .error
   mov   [fh], eax
   invoke   file.size,smfn
   mov   [img_data_len], ebx
   stdcall mem.Alloc, ebx
   test   eax, eax
   jz   .error
   mov   [img_data], eax
   invoke   file.read, [fh], eax, [img_data_len]
   cmp   eax, -1
   jz   .error
   cmp   eax, [img_data_len]
   jnz   .error
   invoke   file.close, [fh]
   inc   eax
   jz   .error

; img.decode checks for img.is_img
;   invoke   img.is_img, [img_data], [img_data_len]
;   or   eax, eaxм
;   jz   exit ;самое интресное, что вызов img.is_img (если его раскомментировать) проходит нормально и признает файл изображением

   invoke   img.decode, [img_data], [img_data_len]; тут прога вылетает с исключением
   or   eax, eax
   jz   .error



Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 9:34 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
А какая версия libimg используется? Та, что из последнего дистра, или самая последняя? В последней версии img_decode принимает ещё и третий аргумент с настройками, в качестве которого можно передавать 0.

_________________
Ушёл к умным, знающим и культурным людям.


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 10:44 am 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
Попробовал передать нолик третьим параметром, тоже исключение. Посмотрел исходники, там два параметра, пересобрал либу из исходников, положил lib, все равно исключение ;(. нашел функцию img.from_file, возвращает нолик, посмотел в код, странно, что же еще она должна возвращать :).
Я мог бы спихнуть все на либы, но пересобранные мною лично kiv и animage работают, кстати неплохо бы в объявлении file.size написать, что она возвращает результат в ebx, а не в eax, как заявлено, я то я 3 часа у себя ошибку в 3 строчках искал...


Последний раз редактировалось Hydra Пн июн 22, 2009 10:55 am, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 10:51 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
А kiv этот файл нормально открывает?


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 10:55 am 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
нормально, и animage нормально
в коде libimg нашел строку img.initialize.jpeg в инициализации либы, мне не нужно вызвать явно какую-нибудь img.initialize.bmp (у меня bmp файл)?
Исходник kiv отличается от моего вызовами тем, что там вначале есть invoke sort.START, это что за хреновина? Может из-за нее? И еще вопрс, почему те либы, что я сам собираю, весят намного больше (например libimg, выдранный из образа весит 8 кб, я собранный из исходников - 15)


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 11:22 am 
Hydra писал(а):
И еще вопрс, почему те либы, что я сам собираю, весят намного больше (например libimg, выдранный из образа весит 8 кб, я собранный из исходников - 15)

Потому что библиотеки можно сжимать, также как и исполняемые файлы, программой KPACK.


Вернуться к началу
   
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 12:17 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
А каким образом происходит загрузка библиотеки? kiv использует готовую dll.Load, которая делает некоторые действия помимо сисфункции 68.19 и для которой нужны mem.Alloc, mem.ReAlloc, mem.Free.

_________________
Ушёл к умным, знающим и культурным людям.


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 12:47 pm 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
я использую тоже готову dll.Load, которую вызываю из dll.inc, mem. функции я спер из примера /libs-dev/.test/001


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 12:52 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
Тогда всё выглядит правильно. Чтобы сказать, что именно не так, нужен полный код.


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 1:55 pm 
Не в сети

Зарегистрирован: Чт июн 18, 2009 8:43 am
Сообщения: 6
для верности перенес весь код в начало программы, чтобы ничего не мешало

Код:
START:                             ; start of execution

   mcall   68,11

   stdcall dll.Load,@IMPORT   
   test   eax, eax
   jz @f
   
   xor eax,eax
   dec eax
   int 0x40
   
   @@:
   ;=================================
   and   [img_data], 0
   invoke   file.open, smfn, O_READ
   or   eax, eax
   jz   .error
   mov   [fh], eax
   invoke   file.size,smfn
   mov   [img_data_len], ebx
   stdcall mem.Alloc, ebx
   test   eax, eax
   jz   .error
   mov   [img_data], eax
   invoke   file.read, [fh], eax, [img_data_len]
   cmp   eax, -1
   jz   .error
   cmp   eax, [img_data_len]
   jnz   .error
   invoke   file.close, [fh]
   inc   eax
   jz   .error
   
 ;img.decode checks for img.is_img
   invoke   img.is_img, [img_data], [img_data_len]   
   or   eax, eax
   jz   .error
      
   ;invoke   img.decode, [img_data], [img_data_len]; все равно исключеие
   or   eax, eax
   jz   .error   
jmp @f
.error:
xor eax,eax
dec eax
int 0x40
@@:

в конце написано:
Код:
library \
   libini,'libini.obj',\
   libio ,'libio.obj',\
   libgfx,'libgfx.obj',\
   libimg,'libimg.obj',\
   libgui,'libgui.obj'
.............................................
import   libimg, \
   libimg.init , 'lib_init'   , \
   img.is_img  , 'img.is_img' , \
   img.to_rgb2 , 'img.to_rgb2', \
   img.decode  , 'img.decode' , \
   img.flip    , 'img.flip'   , \
   img.rotate  , 'img.rotate' , \
   img.destroy , 'img.destroy'


Вернуться к началу
 Заголовок сообщения: Re: использование libs-dev в KlbrInWin
СообщениеДобавлено: Пн июн 22, 2009 3:02 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
Полным кодом называется нечто, что можно скомпилировать, а не разрозненные куски. В этих кусках всё правильно, следовательно, если ошибка вообще есть, то она где-то в другом месте. Не будучи телепатом, не могу сказать, где именно.
Можно и не приводить исходный код, а приаттачить скомпилированный файл, который вылетает. Если вылетает на строго определённом bmp, то лучше приложить и его.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 14 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB