Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
15.01.2011, 10:27   #1
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
Правильная компоновка(символ подчёркивания). / Assembler, MASM, TASM

Существует набор файлов *.obj и один *.inc. Используются функции Win API. При компоновке возникают ошибки:

InitPool.obj : error LNK2001: unresolved external symbol _VirtualAllocEx
Destroy.obj : error LNK2001: unresolved external symbol _VirtualFreeEx
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
SGV.exe : fatal error LNK1120: 3 unresolved externals

Прототипы написаны так:
VirtualAllocEx PROTO NEAR C,
pvAddress : LPVOID,
dwSize : SIZE_T,
fdwAllocationType : DWORD,
fdwProtecf : DWORD

VirtualFreeEx PROTO NEAR C,
pvAddress : LPVOID,
dwSize : SIZE_T,
fdwFreeType : DWORD

Как переписать прототипы функций, чтобы работало? Пробовал алиасы, но что-то даже не компилирует с ними, тем более INVOKE требует прототип. Есть способ обойти ограничение компоновщика?
Включение всего в один файл не предлогать!

Заранее благодарен.
15.01.2011, 10:27
AdAgent
Объявления
15.01.2011, 10:29   #2
murderer
Форумчанин
3098 / 1322 / 42
Регистрация: 06.10.2010
Сообщений: 2,837
Правильная компоновка(символ подчёркивания).

может вместо "NEAR C" надо "NEAR STDCALL"?
Другие темы раздела
Supervisor Password на вход в BIOS Assembler
Добрый день, дали задание на асме расшифровать пароль. Я еще новичек, только начал изучение асма. В инете нашел адреса где хранится этот пароль. 11h - Первый бит определяет, включен или выключен пароль администратора (0 — выключен, 1 — включен). Нулевой бит определяет режим использования пароля...
Assembler Выравнивание по левой крайней границе
Создать текстовый файл. Выполнить выравнивание строк по левой крайней границе. После выполнения операций задать атрибут файла «только для чтения ». я здела почти все кроме выравнивания помогите напишыте как выровнять полевой границе!!!! .8086 .MODEL SMALL .STACK 100h .DATA Count EQU 5...
15.01.2011, 18:45  [ТС]   #3
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
Правильная компоновка(символ подчёркивания).

Я сделал так(теперь только одна ошибка):
ASA.inc
EXTERNDEF _imp__VirtualAlloc@16 : PTR pr4
EXTERNDEF _imp__VirtualFree@12 : PTR pr3

VirtualAlloc EQU <_imp__VirtualAlloc@16>
VirtualFree EQU <_imp__VirtualFree@12>

Всё ошибки компоновки связанные с этими функциями исчесли, а NEAR C -> NEAR STDCALL даёт тот же результат.
--------------------------------------------------------------------------------------------------------

Меня смущает только одно(в сети пишут):
externdef imp__WriteFile@20:PTR pr5
WriteFile equ <_imp__WriteFile@20>

Также обратите внимание на символы прочерка. В первой строке "imp__func@XX" пишется вообще без знаков прочерка, во второй - с одним прочерком. Любые другие варианты не работают.
--------------------------------------------------------------------------------------------------------
Почему так? Ну, да, ладно. Компилирует и компонует - это хорошо.

Подскажите пожалуйста что делать с последней ошибкой компоновки(надеюсь):
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
SGV.exe : fatal error LNK1120: 1 unresolved externals

Как её устранить(пробовал выполнять подстановку NEAR C -> NEAR STDCALL !)?
--------------------------------------------------------------------------------------------------------

Код:
.CODE
main PROC NEAR C

; <код>

INVOKE ExitProcess, 0
main ENDP
END main

Добавлено через 2 часа 58 минут
Я понял что нужно компоновщику - библиотека времени выполнения C.

Необходимо сделать так:
.CODE
start:
; Инициализация библиотеки.

call Main
INVOKE ExitProcess, 0

Main PROC NEAR C
; <code>
Main ENDP

END start
;-------------------------------------------------------------------------------------------------------

В сети советуют подать компоновщику на вход msvcrt.lib, но я его подавал - не находит _mainCRTStartup. Искал сам в этой библиотеки COFF указанную функцию - не нашёл.
Итак, два вопроса:
1) Как называется библиотека C(я использую MASM)?
2) Как я должен инициализировать эту библиотеку(лучше отошлите на какой-нибудь ресурс или дайте дельный совет по инициализации библиотеки)?

Добавлено через 9 минут
*MASM32.
15.01.2011, 18:47   #4
murderer
Форумчанин
3098 / 1322 / 42
Регистрация: 06.10.2010
Сообщений: 2,837
Правильная компоновка(символ подчёркивания).

Лучше избавься от этой _mainCRTStartup.

http://www.rsdn.ru/article/cpp/crt.xml
16.01.2011, 22:10  [ТС]   #5
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
Правильная компоновка(символ подчёркивания). / Assembler, MASM, TASM

Я не решил эту проблему. Я думаю, что это из-за директивы .MODEL flat, C повсеместно, но эта директива должна быть, так как это всё пойдёт после тестирования в *.lib.
Может посоветуете что-то другое, не MASM32, только программы должны выполняться под Vista и в консоли.
16.01.2011, 22:10
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
Assembler Макроопределения совместно с с++: Заменить заданный символ в строке текста на указанный новый символ
Вот код. Задание: заменить заданный символ в строке текста на указанный новый символ. Выдает следующую ошибку на строку "find_space_index string1, string2" 1>macro.asm(110): error A2022: instruction operands must be the same size 1>C:\Program Files...
Assembler для начинающих Дев4енка 20.11.2013 02:12
Assembler Заменить в тексте каждый символ "+" на символ "-", а символ "-" на символ "+". Подсчитать количество замен
Ребять подскажите кому не трудно, что поменять в программе чтобы в веденном тексте каждый + менялся на минус и был подсчет количества замен. ; Макроопределения ; Вызов функции DOS, вызывается функция с номером f. ; Внимание! Изменяется содержимое регистра ah....
Assembler, MASM, TASM Kobe_kobe 27.11.2012 20:50
HTML, CSS изменяемый цвет нижнего подчёркивания!
есть горизонтальное меню, пункты подчёркиваются линией с изменяющейся окраской: от желтого к красному. как задать изменяющийся цвет? если бы был неизменный цвет, тогда border-bottom и вперёд. я предполагаю вариант картинки растянутой БГ в спане ниже пункта меню, правда всё как-то криво...
HTML, CSS .Lexx. 31.07.2012 15:02
C# Как взять из строки все символы до первого разделителя (пробела, подчёркивания)
Есть строка "С245 20 22500 370000". Из этой строки могу убрать - С245 - и остаётся "20 22500 37000" не получается из этой строки взять 20 (на месте 20 может любое другое число). вижу код примерно таким string stal_; stal_ = stal.Text; try { string stal_vibor =...
C# для начинающих folkoru 21.03.2012 13:28
Assembler Компоновка программы
Доброго времени суток!!! Я создаю прогу с внешней процедурой, создала два .asm файла (процедуру и гл. файл), откомрелировала, получила два .obj файла, но вот проблемма мой глючный masm отказывается компоновать её. Если не сложно кто-нибуть скомпонуйте её у себя и скиньте .exe файл. Зарание...
Assembler, MASM, TASM Весна 04.11.2011 23:00
HTML, CSS Цвет подчёркивания ссылки
Не могу сделать цвет подчёркивания красным так, чтоб цвет букв остался розовым. Пишу такое. Файл css: A.menu1:link{text-decoration:none; /*Убираем линию подчёркивания*/ color:blue; } A.menu2:visited{color:red; text-decoration:none;} /*Посещённая ссылка*/ A.menu4:hover{color:magenta;...
HTML, CSS Syltan 06.04.2010 14:51
Assembler Заменить каждый символ латинского алфавита на символ, идущий следующим в алфавите
Дан код программы для M.Visual C++ 2008: С клавиатуры вводится строка длиной N, 2<N<100. Заменить каждый символ латинского алфавита на символ, идущий следующим в алфавите. Символы 'z' и 'Z' не заменять. Результат вывести на экран. .686 .model flat, stdcall include macroses.inc .data include...
Assembler, MASM, TASM VeliNA 14.03.2010 11:48
Assembler Компиляция и компоновка
Можете рассказать, как компилировать и компоновать в MASM и TASM.:help:
Assembler: DOS/Real Mode/16-bits Alexandr 30.10.2008 16:11
Опции темы

Текущее время: 22:56. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.