использование libs-dev в KlbrInWin

Assembler programming questions
  • Hydra
    Как вариант возможно из-за этого:
    viewtopic.php?f=8&t=1279
    А вообще вот мой INI
    KlbrInWin_INI.7z (1.33 KiB)
    Downloaded 363 times

    Code: Select all

    RamDisk=C:\My\kolibri\progs\
    В папке progs разместил содержимое IMG файла. Да и системные библиотеки размещаются в папке LIB, а не в sys\lib. /SYS/ это просто обозначение вместо /RD/1/, потому что планировалось сделать работу без рамдиска.
  • Hydra
    Очень хорошим примером для тебя будет, если ты посмотришь как работают программы использующие библиотеку load_lib.obj, или же ты сам(а) будет использовать макрос load_lib.mac - если либа не найдена или с импортом косяк, - тебе наглядно это отобразиться. (примеры использования RUN, scrshoot, примеры к библиотеке box_lib.obj, RDSAVE и др.)
  • Разобрался с либами, спасибо. Как водится, на смену старой проблеме пришла новая, возникает исключение при вызове img.decode, выдрал кусок кода из kiv'a, тестил все до невозможности, файл открывается, считывается, правильно узнается его размер (даже вывел на экран размер и сам файл), но исключение вылезает как раз при вызове img.decode
    код следующий
    smfn - имя файла

    Code: Select all

    	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
    
    
  • А какая версия libimg используется? Та, что из последнего дистра, или самая последняя? В последней версии img_decode принимает ещё и третий аргумент с настройками, в качестве которого можно передавать 0.
    Ушёл к умным, знающим и культурным людям.
  • Попробовал передать нолик третьим параметром, тоже исключение. Посмотрел исходники, там два параметра, пересобрал либу из исходников, положил lib, все равно исключение ;(. нашел функцию img.from_file, возвращает нолик, посмотел в код, странно, что же еще она должна возвращать :).
    Я мог бы спихнуть все на либы, но пересобранные мною лично kiv и animage работают, кстати неплохо бы в объявлении file.size написать, что она возвращает результат в ebx, а не в eax, как заявлено, я то я 3 часа у себя ошибку в 3 строчках искал...
    Last edited by Hydra on Mon Jun 22, 2009 10:55 am, edited 1 time in total.
  • А kiv этот файл нормально открывает?
  • нормально, и animage нормально
    в коде libimg нашел строку img.initialize.jpeg в инициализации либы, мне не нужно вызвать явно какую-нибудь img.initialize.bmp (у меня bmp файл)?
    Исходник kiv отличается от моего вызовами тем, что там вначале есть invoke sort.START, это что за хреновина? Может из-за нее? И еще вопрс, почему те либы, что я сам собираю, весят намного больше (например libimg, выдранный из образа весит 8 кб, я собранный из исходников - 15)
  • Hydra wrote:И еще вопрс, почему те либы, что я сам собираю, весят намного больше (например libimg, выдранный из образа весит 8 кб, я собранный из исходников - 15)
    Потому что библиотеки можно сжимать, также как и исполняемые файлы, программой KPACK.
  • А каким образом происходит загрузка библиотеки? kiv использует готовую dll.Load, которая делает некоторые действия помимо сисфункции 68.19 и для которой нужны mem.Alloc, mem.ReAlloc, mem.Free.
    Ушёл к умным, знающим и культурным людям.
  • я использую тоже готову dll.Load, которую вызываю из dll.inc, mem. функции я спер из примера /libs-dev/.test/001
  • Тогда всё выглядит правильно. Чтобы сказать, что именно не так, нужен полный код.
  • для верности перенес весь код в начало программы, чтобы ничего не мешало

    Code: Select all

    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
    @@:
    в конце написано:

    Code: Select all

    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'
    
  • Полным кодом называется нечто, что можно скомпилировать, а не разрозненные куски. В этих кусках всё правильно, следовательно, если ошибка вообще есть, то она где-то в другом месте. Не будучи телепатом, не могу сказать, где именно.
    Можно и не приводить исходный код, а приаттачить скомпилированный файл, который вылетает. Если вылетает на строго определённом bmp, то лучше приложить и его.
  • Who is online

    Users browsing this forum: No registered users and 4 guests