Консультация № 32138
25.12.2005, 02:33
0.00 руб.
0 2 1
Уважаемые Эксперты - пожалуйста помогите найти ошибку.
Написал я dll просто для примера (там eax=1+2), скомпилировал:
ml /c /coff mylibrary.asm
link /DLL mylibrary.obj - (Ругался, что ‘entrypoint "__dll_start" is not __stdcall with 12 bytes of arguments; image may not run‘, но mylibrary.dll создал)
Потом создал mylibrary.lib:
implib mylibrary.lib mylibrary.dll - тожеругался: ‘no export‘, хотя я вроде поставил public myfunc, но .lib файл я всё-таки получил.

Создаю теперь tst.asm, куда буду вставлять функцию из этой библиотеки. Компилирую:
ml /c /coff tst.asm - всё норм.
link /subsystem:console tst.obj - и тут fatal error: no argument cpecified with option /defaultlib:
EXE-шник так и не получился. Зачем нужен этот параметр (/defaultlib:), и откуда выскакивает? Почему implib говорит, что "нет экспорта"?

Приложение:
-==Текст mylibrary.asm==-.386.model flat, stdcallpublic myfunc.code_dll_start:myfunc procmov eax, 1add eax, 2retmyfunc endpretend _dll_start-===================--==Текст tst.asm==-.386.model flat, stdcallincludelib sp2.libmyfunc proto.codestart:call myfuncretend start-===============-

Обсуждение

давно
Специалист
742
345
25.12.2005, 08:07
общий
это ответ
Здравствуйте, Zloy_pes!
stdcall вначале убери, entrypoint "__dll_start" is.... ругается на это, потому что нужно не передавать не менее 12 байтов параметров, метку _dll_start: нужно поставить после процедуры и в ней eax присвоить отличное от нуля значение(длл должна возвращать в еах ненулевое значение)
строку implib mylibrary.lib mylibrary.dll писать не надо(у тебя итак длл создается, когда ее компилишь)

Приложение:
ml /c /coff prog.asmlink prog.obj /DLL /entry:dll_start /subsystem:windows /export:myfunc;dll prog.asm.386.model flat public _myfunc@12.code_myfunc@12 procmov eax, 1add eax, 2ret 12_myfunc@12 endp_dll_start@12:xor eax,eaxinc eaxretend _dll_start@12;proga.asm;ml /c /coff proga.asm;link proga.obj /subsystem:console .386.model flat, stdcallincludelib prog.libmyfunc proto :dword,:dword,:dword.codestart:push 0push 0push 0call myfuncretend start
Неизвестный
25.12.2005, 11:00
общий
Спасибо - теперь почти всё понятно. Есть только такой вопрос - что означает _myfunc@12? что дает число 12 на конце? Обязятельно ли ставить символ _ перед названиями меток? Во многих книгах так пишут, но нигде не объясняют зачем...
Форма ответа