suvolod
Зарегистрирован: 02.05.2006 Сообщения: 2
|
Добавлено: Вт Май 02 2006 08:51 Заголовок сообщения: Помогите состыковать C++ и ассемблер |
|
|
У меня есть программка на Си
Код: |
#include <iostream.h>
int var_ext1;
extern "C" {void fnSumm (void);}
void main()
{
cout<<var_ext1<<endl;
fnSumm();
cout<<var_ext1<<endl;
}
|
И модуль на ассемблере:
Код: |
.386
.model flat, C
.code
Extrn C var_ext1:DWORD ;эту переменную получаем из С-модуля
Public C fnSumm ;фция, которая будет видна (вызываться) из С-модуля
fnSumm PROC far
mov WORD PTR var_ext1,1234h
mov WORD PTR var_ext1+2,5678h
ret
fnSumm endp
end
|
Я создаю объектный файл из ассемблерного кода, добавляю его в проект VC++ 6.0, и соответственно хочу, чтобы при вызове фции fnSumm глобальная переменная var_ext1 изменила свое значение. Однако компилятор сыплет ошибками:
1// prim_test.obj : error LNK2001: unresolved external symbol _var_ext1. Как я понял, MASM 8, которым я создаю из asm -> obj, добавляет к каждой переменной знак подчеркивания спереди. Я долго пытался избавиться от этого знака, перерыл все настройки Masm-а, но у меня ничего не получилось ((
//2 Тогда я попробовал этот знак подчеркивания добавить к переменной в cpp-коде, и ничего не изменилось, компилятор по прежнему плюется ошибкой «unresolved external symbol _var_ext1». Как я понимаю, var_ext1 у меня в Си-коде объявлена глобальной, а значит видна всем модулям в пределах приложения, в том числе должна быть видна и объектному модулю из asm-а, тем более что эта переменная и так там явно объявлена как Extrn |
|
suvolod
Зарегистрирован: 02.05.2006 Сообщения: 2
|
Добавлено: Вт Май 02 2006 08:52 Заголовок сообщения: |
|
|
Я хочу еще раз подчеркнуть: мне по условию задачи надо изменить глобальную переменную var_ext1 си-шного модуля, используя фцию, релизованную на асме, которая не принимает и не возвращает никаких параметров. Фактически я пытаюсь просто разобраться, как можно «передать» переменную в asm-модуль, причем передать не в качестве параметра фции, а явно, чтобы и asm, и си-модуль реально общались с одной переменной, и чтобы изменения, произошедшие с переменной в asm-модуле, сразу же были отражены в си-модуле |
|