Поиск:

Ответ в темуСоздание новой темы Создание опроса
> asm модуль в с++ (error LNK1120), внешняя функция на асм не работает в с++ 
:(
    Опции темы
binarnik
Дата 3.11.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.4.2009

Репутация: нет
Всего: нет



Помогите плз с проблемкой, хотел привязать асм к с++, но не получилось вот асм модуль:

Код

.586
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
GetStdHandle PROTO nStdHandle:DWORD
SetConsoleTextAttribute PROTO    nStdHandle:DWORD,    nColor:DWORD
.CODE

color PROC x:DWORD
    push ebp
    mov ebp,esp
    
    mov ebx,x
    INVOKE GetStdHandle, -11
    
      INVOKE SetConsoleTextAttribute, eax, ebx
    
    pop ebp
    ret 
color ENDP
    
END 
    


это непосредственно компиляция(батник):

Код

    ml -Zi -c -Fl -coff %1.asm
    if errorLevel 1 goto ml_error
    Link32 %1.obj Lib32/kernel32.lib /SUBSYSTEM:CONSOLE /DEBUG
    if errorLevel 1 goto link_error


с++ код:

Код

#include "stdafx.h"
#include <iostream>
using namespace std;

extern "C" void color(int a);

int _tmain(int argc, _TCHAR* argv[])
{

    color(10);
    
    cout << "\n\nHello WORLD" << endl;


    return 0;
}




скрин ошибки при линковке:

user posted image

в visual studio2008 выскакивает вот такая ошибка:

Код

Компоновка...
test123.obj : error LNK2001: неразрешенный внешний символ "_color"
**\test123.exe : fatal error LNK1120: 1 неразрешенных внешних элементов




Это сообщение отредактировал(а) binarnik - 4.11.2009, 14:46
PM MAIL   Вверх
AndNot
Дата 5.11.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Ошибки две.
1. Подпрограмму color необходимо объявить как экспортируемую, т.е. разрешить ее "видимость" линкеру: 
Код
public color
color PROC x:DWORD
....

2. В сишном модуле color объявляется как "C". Это подразумевает, что color будет иметь сишный стиль имени, т.е. _color (добавляется знак подчеркивания перед именем). Но в асме подпрограмма объявлена как STDCALL, поэтому экспортируется без искажения имени. Нужно согласовать: либо объявить color как сишную, либо в сишной проге объявить ее как stdcall.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.