При попытке подключения .obj файла возникает ошибка LNK1107 недопустимый или поврежденный файл: не удается прочитать по 0xDF HLL D:\Aleksey\Учеба\C++\HLL\HLL\add_matrix.OBJ
Код проекта
#pragma comment(lib, "add_matrix")
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
typedef std::vector<std::vector<int>> matrix;
extern "C"
{
char __cdecl add_matrix(const matrix& a, const matrix& b, matrix& c, const int size);
}
int main()
{
std::srand(unsigned(std::time(NULL)));
setlocale(LC_ALL, "ru");
int size;
std::cout << "Введите размерность матриц: ";
std::cin >> size;
matrix a(size, std::vector<int>(size, 0));
matrix b (size, std::vector<int>(size, 0));
matrix c (size, std::vector<int>(size, 0));
for (int i = 0; i < size; i++)
{
std::for_each(a[i].begin(), a[i].end(), [](int& x) {x = rand() % 10 + 1; });
std::for_each(b[i].begin(), b[i].end(), [](int& x) {x = rand() % 10 + 1; });
}
char res = add_matrix(a, b, c, size);
std::cin.get();
return 0;
}
Код файла add_matrix.asm(еще не дописал, хотел посмотреть в дебаге из вижуалки)
.486
.model flat
.data
i db 0
.code
PUBLIC add_matrix
add_matrix proc near
push ebp
mov ebp, esp
;---------------------------
mat_a equ dword ptr [ebp+8]
mat_b equ dword ptr [ebp+12]
mat_c equ dword ptr [ebp+16]
n equ dword ptr [ebp+20]
;---------------------------
xor eax, eax
xor ebx, ebx
mov ebx, mat_a
;
pop ebp
ret
add_matrix endp
end
Неудивительно, что Visual Studio не понимает объектный файл, порожденный tasm. Для Visual Studio, видимо, придется пользоваться MASM.
В ASM файле укажите
.model flat,C
чтобы способ именования внешних символов совпадал с extern "C"
.
Вся ваша возня с библиотеками и "подключение объектного файла" не обязательна. Вы можете просто добавлять MASM файлы в Visual Studio проект, как обычные C или C++ файлы. Они будут компилироваться MASM и собираться линкером по общей схеме. Ничего никуда не надо дополнительно подключать (если ваша цель не состоит в том, чтобы создать внешнюю библиотеку).
Каким образом (и зачем) вы собрались "разбирать" std::vector
в ассемблере, правда, не ясно. Но то, что вы пока написали, прекрасно компилируется и собирается в Visual Studio.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как из обычного классического desktop приложения написанного на C++ запустить приложение установленное из Windows Store? По аналогии с QProcess
Существует ли способ построить в классе группу "одинаковых" методов, но использующих каждый одно уникальное свойство/параметр, при помощи...
Возник такой вопрос: как реализовать решение следующей задачи на C++? Вводятся число N - количество строкВ каждой из N строк через пробел вводятся...
Делаю приложение, которое запускается на Windows 7/10 от пользователя с правами администратораПри этом запускается оно в обычном режиме (с ограниченными...