С исходниками вышла какая-то путаница. Эта версия с явными ошибками а где нормальная я не знаю. У diamonda должна быть работающая версия. Надо выложить её на svn.
P.S. DLL можно паковать kpackом
Менеджер DLL в MeOS
попытался портировать на metcc этот пример, вылетает с ошибкой http://victor.kolibrios.org/download/testpr.JPG
по рисунку видно что вылетает в функции link после получении адреса первых двух функций из импорта или в getproc при попытке получить третий.
http://victor.kolibrios.org/download/console/ - там файлы которые я правил
по рисунку видно что вылетает в функции link после получении адреса первых двух функций из импорта или в getproc при попытке получить третий.
http://victor.kolibrios.org/download/console/ - там файлы которые я правил
Потому что их никто не добавил. Описание есть в sysfuncr.txt из дистрибутива, а также в приложении docpak из дистрибутива.почему описани функций всё ещё нет на svn в docs?
В дистрибутиве лежит новая, корректная версия console.obj, использующая для выделения памяти не 64-ю функцию, а новую 68.12. Дело в том, что загрузка DLL подразумевает неявную инициализацию кучи процесса, после которой вызовы 64-й функции проваливаются (о чём написано в документации и предупреждает эмулятор). Исходники, между прочим, честно выложены в папке k0630_src.7z/dll/console.пример DLL не работает в эмуляторе.
Я хочу создать dll-ку с курсорами.Сделал вариант dll.Пробовал из неё курсоры грузить - не работает.
Может я что- то неправильно организовал в dll-ке ?
Вот исходный код dll:
format MS COFF
public EXPORTS
section '.flat' code readable align 16
;void __stdcall START(dword state);
START:
xor eax, eax
not eax
ret 4
align 4
cursor_brush:
mov ebx,brus_cursor
push ebx
ret
align 4
cursor_flood_fill:
mov ebx,flood_fill_cursor
push ebx
ret
align 4
cursor_lastik:
mov ebx,lastik_cursor
push ebx
ret
align 4
cursor_other:
mov ebx,other_cursor
push ebx
ret
align 4
cursor_pencil:
mov ebx,pencil_cursor
push ebx
ret
align 4
cursor_pipette:
mov ebx,pipette_cursor
push ebx
ret
align 4
cursor_spray:
mov ebx,spray_cursor
push ebx
ret
align 4
cursor_zoom:
mov ebx,zoom_cursor
push ebx
ret
align 16
EXPORTS:
dd szStart, START
dd szBrush, cursor_brush
dd szFlood, cursor_flood_fill
dd szLastik, cursor_lastik
dd szOther, cursor_other
dd szPencil, cursor_pencil
dd szPipette, cursor_pipette
dd szSpray, cursor_spray
dd szZoom, cursor_zoom
szStart db 'START',0
szBrush db 'cursor_brush',0
szFlood db 'cursor_flood_fill',0
szLastik db 'cursor_lastik',0
szOther db 'cursor_other',0
szPencil db 'cursor_pencil',0
szPipette db 'cursor_pipette',0
szSpray db 'cursor_spray ',0
szZoom db 'cursor_zoom',0
section '.data' data readable writable align 16
brus_cursor:
file 'brush.cur'
flood_fill_cursor:
file 'flood_fill.cur'
lastik_cursor:
file 'lastik.cur'
other_cursor:
file 'other.cur'
pencil_cursor:
file 'pencil.cur'
pipette_cursor:
file 'pipette.cur'
spray_cursor:
file 'spray.cur'
zoom_cursor:
file 'zoom.cur'
Может я что- то неправильно организовал в dll-ке ?
Вот исходный код dll:
format MS COFF
public EXPORTS
section '.flat' code readable align 16
;void __stdcall START(dword state);
START:
xor eax, eax
not eax
ret 4
align 4
cursor_brush:
mov ebx,brus_cursor
push ebx
ret
align 4
cursor_flood_fill:
mov ebx,flood_fill_cursor
push ebx
ret
align 4
cursor_lastik:
mov ebx,lastik_cursor
push ebx
ret
align 4
cursor_other:
mov ebx,other_cursor
push ebx
ret
align 4
cursor_pencil:
mov ebx,pencil_cursor
push ebx
ret
align 4
cursor_pipette:
mov ebx,pipette_cursor
push ebx
ret
align 4
cursor_spray:
mov ebx,spray_cursor
push ebx
ret
align 4
cursor_zoom:
mov ebx,zoom_cursor
push ebx
ret
align 16
EXPORTS:
dd szStart, START
dd szBrush, cursor_brush
dd szFlood, cursor_flood_fill
dd szLastik, cursor_lastik
dd szOther, cursor_other
dd szPencil, cursor_pencil
dd szPipette, cursor_pipette
dd szSpray, cursor_spray
dd szZoom, cursor_zoom
szStart db 'START',0
szBrush db 'cursor_brush',0
szFlood db 'cursor_flood_fill',0
szLastik db 'cursor_lastik',0
szOther db 'cursor_other',0
szPencil db 'cursor_pencil',0
szPipette db 'cursor_pipette',0
szSpray db 'cursor_spray ',0
szZoom db 'cursor_zoom',0
section '.data' data readable writable align 16
brus_cursor:
file 'brush.cur'
flood_fill_cursor:
file 'flood_fill.cur'
lastik_cursor:
file 'lastik.cur'
other_cursor:
file 'other.cur'
pencil_cursor:
file 'pencil.cur'
pipette_cursor:
file 'pipette.cur'
spray_cursor:
file 'spray.cur'
zoom_cursor:
file 'zoom.cur'
andrew_programmer
align 4
cursor_pipette:
mov ebx,pipette_cursor
push ebx
ret
Я не понял как такой код должен работать. Ты записываешь в стек ebx (pipette_cursor), а потом делаешь возврат, то есть фактически переходишь на адрес pipette_cursor.
Не знаю нужна ли здесь DLL. Для загрузки системных курсоров хотел собрать их все вместе отдельным файлом и дальше грузить в цикле.
COUNT equ 3
dd COUNT
dd _3darrow
dd _3darrowm
dd _3darrowl
_3darrow:
file '3darrow.cur'
_3darrowm:
file '3darrowm.cur'
_3darrowl:
file '3dgarrowl.cur'
Ещё надо учесть что после загрузки DLL ф.64 перестаёт работать, так что выделять память надо через ф.68
align 4
cursor_pipette:
mov ebx,pipette_cursor
push ebx
ret
Я не понял как такой код должен работать. Ты записываешь в стек ebx (pipette_cursor), а потом делаешь возврат, то есть фактически переходишь на адрес pipette_cursor.
Не знаю нужна ли здесь DLL. Для загрузки системных курсоров хотел собрать их все вместе отдельным файлом и дальше грузить в цикле.
COUNT equ 3
dd COUNT
dd _3darrow
dd _3darrowm
dd _3darrowl
_3darrow:
file '3darrow.cur'
_3darrowm:
file '3darrowm.cur'
_3darrowl:
file '3dgarrowl.cur'
Ещё надо учесть что после загрузки DLL ф.64 перестаёт работать, так что выделять память надо через ф.68
>Я не понял как такой код должен работать. Ты записываешь в стек ebx (pipette_cursor), а потом делаешь возврат, то есть фактически переходишь на адрес pipette_cursor.
Я хотел получить в стеке указатель на начало данных(определённого курсора) в dll.Но ,как видно, неправильно реализовал эту идею.
>Не знаю нужна ли здесь DLL. Для загрузки системных курсоров хотел собрать их все вместе отдельным файлом и дальше грузить в цикле.
Как назовём этот файл ?
Чем будет упакован ?
Кто будет распаковывать файл с курсорами(если сама программа,то нужен распаковщик в виде dll) ?
В какой дериктории будет находиться файл с курсорами?
Курсоры для ANIMAGE готовы.Дизайн от goglus-а я приделал.Осталось только решить вышеописанные вопросы с курсорами.
Я хотел получить в стеке указатель на начало данных(определённого курсора) в dll.Но ,как видно, неправильно реализовал эту идею.
>Не знаю нужна ли здесь DLL. Для загрузки системных курсоров хотел собрать их все вместе отдельным файлом и дальше грузить в цикле.
Как назовём этот файл ?
Чем будет упакован ?
Кто будет распаковывать файл с курсорами(если сама программа,то нужен распаковщик в виде dll) ?
В какой дериктории будет находиться файл с курсорами?
Курсоры для ANIMAGE готовы.Дизайн от goglus-а я приделал.Осталось только решить вышеописанные вопросы с курсорами.
andrew_programmer
С системными курсорами ничего не ясно. Сколько их должно быть, как выглядеть и как называться. Никто ничего не предлагает.
Для программ проще компилировать курсоры вместе с кодом.
Примерно так:
С системными курсорами ничего не ясно. Сколько их должно быть, как выглядеть и как называться. Никто ничего не предлагает.
Для программ проще компилировать курсоры вместе с кодом.
Примерно так:
Code: Select all
LOAD_FROM_MEM equ 1
для загрузки курсоров
lea esi, cursor_brush
mov edx, LOAD_FROM_MEM
mov ebx, 4
@@:
mov ecx, [esi]
test ecx, ecx
jz .done
mov eax, 37
int 0x40
mov [esi], eax
add esi, 4
jmp @B
.done:
для установки нужного курсора
set_brush:
mov eax, 37
mov ebx, 5
mov ecx, [cursor_brush]
int 0x40
ret
align 4
cursor_brush dd brus_cursor
cursor_flood_fill dd flood_fill_cursor
cursor_lastik dd lastik_cursor
cursor_other dd other_cursor
cursor_pencil dd pencil_cursor
...
...
dd 0 ;terminator
brus_cursor:
file 'brush.cur'
flood_fill_cursor:
file 'flood_fill.cur'
lastik_cursor:
file 'lastik.cur'
other_cursor:
file 'other.cur'
pencil_cursor:
file 'pencil.cur'
...
...
>Для программ проще компилировать курсоры вместе с кодом.
Так эту идею я уже предлпгал ранее (вроде в теме про ATI находиться).
Если подключать к коду,то проблем с курсорами нет.
Так эту идею я уже предлпгал ранее (вроде в теме про ATI находиться).
Если подключать к коду,то проблем с курсорами нет.
andrew_programmer
Я специально сделал три способа загрузки курсоров: из файла, из программы и готовый ARGB образ. На все случаи жизни.
С #224 можно грузить полноцветные курсоры. Осталось добавить монохромные и 256 цветов.
Я специально сделал три способа загрузки курсоров: из файла, из программы и готовый ARGB образ. На все случаи жизни.
С #224 можно грузить полноцветные курсоры. Осталось добавить монохромные и 256 цветов.
Code: Select all
;void __stdcall START(dword state);
START:
xor eax, eax
not eax
ret 4
Я над байтами не задумывался.Что было в consol.asm ,то и содрал.
[diamond удивлённо лезет в исходники k0630_src/dll/console/console.asm и обнаруживает полное отсутствие инструкции not]
Code: Select all
START:
push 68
pop eax
push 11
pop ebx
int 0x40
or eax, -1
ret 4
diamond,консоль я скачал с твоего сайта.Я думал,что она такая же,как и в исходниках 0630.
Не может быть. Я точно не выкладывал на свой сайт версию с not eax. В любом случае, обнови библиотеку консоли - там исправлена пара ошибок по отношению к версии из дистрибутива. Текущая версия http://diamondz.land.ru/console.7z совершенно точно содержит код, приведённый выше.