Всем привет. Имею несколико неплохих програмок написаных на FASM. Подскажите пожалуста как можно эти програмки внедрить в C++ прграмму? Компилятор FASM'а умеет создавать MS Coff файлы, проблемма собственно в том, что я не знаю как их использовать в программах C++. Помогите хто чем может?
Sashok проэкспортировать интерфейсные функции в какойнить из понимаемых С++ конвенций (например, С) проэкстернить их заголовки в С++ сорсе. пользоваться
Код (Text): #include <stdio.h> #include <tchar.h> extern "C" { unsigned __cdecl factorial(unsigned); unsigned __stdcall fibonacci(unsigned); } int _tmain(void) { unsigned val; _tscanf_s(__T("%u"), &val); _tprintf_s(__T("factorial(%u) = %u\n"), val, factorial(val)); _tprintf_s(__T("fibonacci(%u) = %u\n"), val, fibonacci(val)); } Код (Text): format MS COFF public factorial as '_factorial' ; __cdecl convention public fibonacci as '_fibonacci@4' ; __stdcall convention section '.text' code readable executable factorial: mov ecx, [esp+4] xor eax, eax inc eax jecxz .finish xor edx, edx .loop: mul ecx loop .loop .finish: retn fibonacci: mov eax, [esp+4] xor ecx, ecx xor edx, edx or ecx, eax mov eax, edx jz .finish inc edx .loop: xadd eax, edx loop .loop .finish: retn 4 В настройках проекта в "Компоновщик/Ввод/Дополнительные зависимости" добавить путь к .obj файлу.
KeSqueer ваш С++ код не компилируется(Microsoft Visual Studio .NET 2003). Я его немного изменил: #include <stdio.h> #include <tchar.h> extern "C" { unsigned __cdecl factorial(unsigned); unsigned __stdcall fibonacci(unsigned); } int _tmain(void) { unsigned val; scanf(__T("%u"), &val); printf(__T("factorial(%u) = %u\n"), val, factorial(val)); printf(__T("fibonacci(%u) = %u\n"), val, fibonacci(val)); Теперь копилируется но видает ошибку: Linking... LIBCD.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function _WinMainCRTStartup Debug/MS Coff C++.exe : fatal error LNK1120: 1 unresolved externals Так в чем дело?
Проект консольный. При компиляции кода без изминений : MSCoffC++.cpp error C3861: '_tscanf_s': identifier not found, even with argument-dependent lookup error C3861: '_tprintf_s': identifier not found, even with argument-dependent lookup error C3861: '_tprintf_s': identifier not found, even with argument-dependent lookup Каким компилятором вы это компилировали?
Sashok Попробуй функцию int _tmain(void) поменяй на int WinMain или на main(), но при main, в параметрах линкера укажи /entry:"mainCRTStartup".
Проект собирался в 2008 студии, уверен, что в 2005 тоже должно компилироваться и линковаться. Если проект консольный, этой ошибки быть не может: Не имею под рукой 2003 .NET студию, не могу проверить. Но раз уж проблема есть, то такое должно работать: Код (Text): #include <stdio.h> extern "C" { unsigned __cdecl factorial(unsigned); unsigned __stdcall fibonacci(unsigned); } int main(void) { unsigned val; scanf("%u", &val); printf("factorial(%u) = %u\n", val, factorial(val)); printf("fibonacci(%u) = %u\n", val, fibonacci(val)); } При условии, что если в настройках можно указать, использовать многобайтовую или юникод-кодировку с выбором многобайтовой.