Всем привет Такая проблема: не получается "связать" процедуру из ASM с программой на C++. Выкладываю исходники: main.asm Code: TITLE AssemblyTest INCLUDE Irvine32.inc _Func PROTO C, sPtr:PTR BYTE .data str1 BYTE ? .code _Func PROC sPtr:PTR BYTE mov edx, sPtr call WriteString ret _Func ENDP END test.cpp Code: #include <iostream> #include "assembly.h" #include "main.asm" using namespace std; int main() { string var; string *variable; var = "Hey there!"; variable = &var; _Func(variable); return 0; } assembly.h Code: extern "C" { void _Func(std::string *newStr); }
че за стреда разработки ? в виз студии писал что нить подобное, только асм код был в длл, а прога на С++ его вызывала. вот что наскреб по засусекам.. код проги на С++ который вызывает длл длл с асмом MYDLL.CPP MYDLL.DEF смотри мож по аналогии что нить намутишь. просто нет времени конкретно вникать в твою задачу, вот и скинул куски того что когда то писал.
Я использую Microsoft Visual Studio 2010. У тебя, по ходу, в MYDLL.CPP так называемый "inline assembly code", а мне нужно, чтобы они были в разных файлах - "external linking"; например: main.cpp и assembler.asm
Ну дык ты не туда полез. ASM файлы ты сам компилишь и получаешь obj файлы, а их уже при линковке используешь. т.е. через тотже masm скомпилить этото asm код в obj и добавль в проект (в параметры линкера)
Получил obj файл, добавил в проект и прописал в include; теперь проект напрочь отказывает компилироваться и выдает множество ошибок: Code: Error 1 error C2018: unknown character '0x1' Error 2 error C2018: unknown character '0x6' Error 3 error C2018: unknown character '0x1c' Error 4 error C2018: unknown character '0x13' Error 5 error C2146: syntax error : missing ';' before identifier 'Ь«йLv' Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 7 error C2143: syntax error : missing ';' before '.' ... test.cpp Code: #include <iostream> #include "assembly.h" #include "main.obj" using namespace std; int main() { string var; string *variable; var = "Hey there!"; variable = &var; _Func(variable); return 0; } Странно...
Его иклудить не надо. Его надо добавлять при линковке. Просто тупо в командноую строку линкера добавь этот файл.