Вопрос № 110352: Здравствуйте уважаемы эксперты!!! хотел задать вопрос по созданию программ под Win32 на асме...у меня такакя проблема: есть например простой код который (который приведен в приложении) вызывает (или должен ;) ) одну API функцию ExitProcess,вроде она ...
Вопрос № 110.352
Здравствуйте уважаемы эксперты!!! хотел задать вопрос по созданию программ под Win32 на асме...у меня такакя проблема: есть например простой код который (который приведен в приложении) вызывает (или должен ;) ) одну API функцию ExitProcess,вроде она описана директивой как внешняя а также директивой extrn ExitProcess: PROC, а вот тут у меня появляется несколько непоняток: если перед этой директивой написать include w32.inc (функция там упоминается) то при обработке этого кода TASM32 он пишет ошибку **Error**
w32.inc(5023) PROCDESC(2) Symbol already different kind: EXITPROCESS хотя во включаемом файле заголовок функции упоминается только 1 раз :( (хотя неважно эта функция или другая от этого ничего не меняется сообщение - он ругается и на нее) если попробовать вместо файла inc включить lib то он (TASM32) пишет **Fatal** import32.inc(4) Line too long :( если же попробовать не указывать директиву include то TASM32 это "съедает" но TLINK32 говорит Unresolved external 'EX
ITPROCESS' referenced from module asm.ASM (причем если в командной строке указываешь после файла obj и библиотеку lib которая как написано содержит основные функции API).Я уже пробовал и ключи /mx /ml для TASM32'го но линкер опять же не хочет это понимать :( Объясните пожалуйста может я что то не так делаю в коде может что то свкючаемым файлом или с библиотеками (хотя я брал несколько пакетов TASM и даже тот который распаковывается - ну типа инсталяционный пакет) может для таких случаев надо использовать какие
то ключи для TASM32 и TLINK32? :(незнаю но в книгах по асму этому вопросу не сильно уделяют внимания то есть "...типа есть такая вещь вот так указываешь и все работает":( в приложении наверно приведу только код а код включаемого файла все таки не думаю что стоит приводить поскольку он 172 Кб. Помогите разобраться пожалуйста. Заранее благодарен
Приложение:
Отправлен: 21.11.2007, 07:07
Вопрос задал: Arshvin (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Arshvin!
В Inc-файле функция упоминается один раз, в основной программе один раз-итого два раза. Повторное определение символа(функции, переменной метки). Уберите одно из этих определений или используйте директивы условного ассемблирования: IFDEF метка/ELSEIFDEF метка — если метка определена; IFNDEF метка/ELSEIFNDEF метка — если метка не определена;
Для подключения LIB или OBJ файлов есть директива INCLUDELIB, использование вместо неё директивы INCLUDE приводит к тому,
что компилятор TASM32 пытается скомпилировать уже скомпилированный файл. INCLUDE имя_файла — директива, вставляющая в текст программы текст файла аналогично команде препроцессора C #include. Обычно используется для включения файлов, содержащих определения констант, структур и макросов. INCLUDELIB имя_файла — директива, указывающая компоновщику имя дополнительной библиотеки или объектного файла, который потребуется при составлении данной программы. Наприм
ер, если используются вызовы процедур или обращение к данным, определенным в других модулях. Использование этой директивы позволяет не указывать имена дополнительных библиотек при вызове компоновщика.
Для создания Win32 использую такой bat-файл: tasm32 %1 /m /ml tlink32 %1 /Tpe /aa /c /x набирая в командной строке TW Prog01
Удачи!
--------- И только наступив на грабли мы приобретаем драгоценный опыт!