символ підкреслення

Необхідно додати в імені викликається процедури символ підкреслення і суфікс @ п, де п - число байт, необхідну для передачі параметрів. В даному випадку п дорівнює 8. Така форма іменування процедури відповідає вимогам компілятора С + + для коректної роботи. З урахуванням цих змін вихідний текст буде виглядати так, як показано в лістингу 3.15.
Лістинг 3.15. Процедура на асемблері, скоригована для виклику з С ++
.386
.model flat
public _AddInts @ 8
.data
.code
_AddInts @ 8 proc
push EBP
mov EBP, ESP
mov EAX, DWORD PTR [EBP + 8]
add EAX, DWORD PTR [EBP + 12]
pop EBP
ret 8
_AddInts @ 8 endp
end
Як видно з початкового тексту, єдиний параметр, який піддався зміні в порівнянні з Delphi, - це ім'я процедури. Компіляція виконується так само, як і в попередньому варіанті. Для компілятора TASM:
tasm32 / ml Addints.asm
або для MASM:
ml / с Addints.asm

Тепер подивимося, як виглядає програмний код, що викликає асемблерні процедури з С + + .NET. Перш за все ми повинні описати спричинюється процедуру в розділі описів змінних і функцій:
extern "?" int stdcaii Addints (int il, int i2);

Фрагмент програми, що виконує обчислення з використанням зовнішньої процедури Addlnts, міг би виглядати так:
int II = 74;
int 12 = -56;
int ires;
ires = Addlnts (II, 12);

Специфікатор "С" забороняє компілятору С ++ декорувати ім'я зовнішнього ідентифікатора. Декорування імен (name decoration) - це стандартна технологія компілятора С ++, при якій відбувається розширення імені за допомогою додаткових символів, що несуть інформацію про тип кожного параметра. Директива extern, як і в разі програми на Delphi, вказує на те, що ідентифікатор процедури є зовнішнім. Перед компіляцією програми на С + + необхідно додати в проект об'єктний файл з спричиненої процедурою. Найкраще, якщо ви скопіюєте об'єктний файл з процедурою в робочий каталог проекту. Це зауваження стосується як С + + .NET, так і Delphi 7.
І ще одне зауваження. Компілятор Visual С ++ працює з об'єктними файлами в форматі COFF (Common Object File Format - загальний формат об'єктних файлів), на відміну від Delphi, який використовує файли в стандарті OMF (Object Module Format - формат об'єктних модулів). Тому в процесі складання вашого проекту в С + + .NET ви можете отримати попередження компоновщика:
Warning: converting object format from OMF to COFF

В принципі, це не так важливо, оскільки компілятор С ++ перетворює OMF-файл в COFF в будь-якому випадку. Компілятор TASM, на жаль, не дозволяє отримувати файли формату COFF, а для MASM ви можете задати опцію / colt '.
ml / с / coff Addlnts.asm