Все доброво времени суток. У меня небольшая пробдема. Есть следующий простой код Код (Text): .486 .model flat, stdcall .data .code start proc near ret start endp end start Если я его компилирую с помощью ml и собираю с помощью link.exe, то exe-шник появляется без проблем Код (Text): \masm32\bin\ml /c /coff test.asm \masm32\bin\link /SUBSYSTEM:CONSOLE test.obj Если же попробовать скомпоновать полученный объектный файл Unilink'ом, то появляется следующая ошибка Пробовал и в ручную указывать точку входа программу - результат тот же Никто не может объяснить в чем проблема? Я так полагаю, что я что-то не так делаю, а вот что не пойму. Подскажите пожалуйста Заранее большое спасибо
lomomike Причина в stdcall - к именам добавляется подчеркивание и @<число аргументов> Масмовый линкер это учитывает. Как быть тебе - решай сам. Можно либо задать точку входа, если позволяется @ или в определении start задать pascal или вообще выбрать это в .model
lomomike Но учти, если будешь использовать .model pascal то вызовы библиотечных функций могут не работать или дадут неразрешенные ссылки. Правда я это не проверял. В Фортране в похожей ситуации - все нормально, т.к. МС библы содержат переходники. Правда там тип не pascal, а C refrence.
С унилинком не работал. Но было нечто подобное с влинком. Надо посмотреть как манглятся имена точно. Разные компилеры в разных режимах делают это по разному. Для этого достаточно посмотреть объектник в текстовом режиме. Бывает, что при сшивании объектников/либ от разных компилеров приходится переименовывать функции. Во влинке это делается достаточно просто. А использовать раскаль вместо стдкал-а.. Не знаю. ИМХО могут вылезти проблемы. И при и при склейке с инородными языками/средами. Хотя я тоже это не проверял.
Я паскаль и не стал использовать, оказалось надо было точку входа вручную прописать, а я не учел то, о чем valterg говорил про подчеркивание и @ и следовательно имя неправильно прописывал
Некоторые компилеры '_' ставят сдругой стороны, некоторые не ставят вообще. Некоторые компилеры в стдкалл конвенции не ставят цифер после '@', некоторые не добавляют и сам '@'. Если вы собираетесь всю жизнь писать под MSVC то это одно дело. Однако если вам любопытны и другие инструменты стоит смотреть как что манглится.