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

Ответ Создать новую тему
 
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
15.01.2011, 10:27     Правильная компоновка(символ подчёркивания).
  #1
Существует набор файлов *.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 требует прототип. Есть способ обойти ограничение компоновщика?
Включение всего в один файл не предлогать!

Заранее благодарен.
AdAgent
Объявления
15.01.2011, 10:27
murderer
Форумчанин
3099 / 1323 / 43
Регистрация: 06.10.2010
Сообщений: 2,841
15.01.2011, 10:29
  #2
может вместо "NEAR C" надо "NEAR STDCALL"?
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
15.01.2011, 18:45  [ТС]
  #3
Я сделал так(теперь только одна ошибка):
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.
murderer
Форумчанин
3099 / 1323 / 43
Регистрация: 06.10.2010
Сообщений: 2,841
15.01.2011, 18:47
  #4
Лучше избавься от этой _mainCRTStartup.

http://www.rsdn.ru/article/cpp/crt.xml
Maksim_27_10
Новичок
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 23
16.01.2011, 22:10  [ТС]     Правильная компоновка(символ подчёркивания).
  #5
Я не решил эту проблему. Я думаю, что это из-за директивы .MODEL flat, C повсеместно, но эта директива должна быть, так как это всё пойдёт после тестирования в *.lib.
Может посоветуете что-то другое, не MASM32, только программы должны выполняться под Vista и в консоли.
Yandex
Объявления
16.01.2011, 22:10
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
Assembler Макроопределения совместно с с++: Заменить заданный символ в строке текста на указанный новый символ
Вот код. Задание: заменить заданный символ в строке текста на указанный новый символ. Выдает следующую ошибку на строку "find_space_index string1, string2" 1>macro.asm(110): error A2022: instruction...
Assembler для начинающих Дев4енка 20.11.2013 02:12
Assembler Заменить в тексте каждый символ "+" на символ "-", а символ "-" на символ "+". Подсчитать количество замен
Ребять подскажите кому не трудно, что поменять в программе чтобы в веденном тексте каждый + менялся на минус и был подсчет количества замен. ; Макроопределения ; ...
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 может любое другое число). вижу код примерно...
C# для начинающих folkoru 21.03.2012 13:28
Assembler Компоновка программы
Доброго времени суток!!! Я создаю прогу с внешней процедурой, создала два .asm файла (процедуру и гл. файл), откомрелировала, получила два .obj файла, но вот проблемма мой глючный masm отказывается...
Assembler, MASM, TASM Весна 04.11.2011 23:00
HTML, CSS Цвет подчёркивания ссылки
Не могу сделать цвет подчёркивания красным так, чтоб цвет букв остался розовым. Пишу такое. Файл css: A.menu1:link{text-decoration:none; /*Убираем линию подчёркивания*/ color:blue; }...
HTML, CSS Syltan 06.04.2010 14:51
Assembler Заменить каждый символ латинского алфавита на символ, идущий следующим в алфавите
Дан код программы для M.Visual C++ 2008: С клавиатуры вводится строка длиной N, 2<N<100. Заменить каждый символ латинского алфавита на символ, идущий следующим в алфавите. Символы 'z' и 'Z' не...
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
Опции темы

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

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