Я пытался вызвать библиотеку в C, которая была сделана в MAM.
Мне удалось сделать .lib файл из сборки MASM.
Но я понятия не имею, как назвать это языком Си как библиотеку.
Вот файл .lib
https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib
Нужна помощь.
Спасибо
Основная идея довольно проста:
Общая идея выглядит примерно так (предупреждение: непроверенный код):
; masm file
.model flat, c
.code
plus1 proc input:dword
mov eax, input
add eax, 1
ret
plus1 endp
end
Заголовок C / C ++:
#ifdef __cplusplus
extern "C" {
#endif
int plus1(int);
#ifdef __cplusplus
}
#endif
Телефонный код:
#include "header.h"
int main() {
int x = plus1(14);
}
О чувак. Огромная ошибка на этом. В 32-битном MASM-файле .asm в визуальной студии это «.model flat, c» является КРИТИЧЕСКИМ. ОСОБЕННО «С». 64-битная сборка MASM не нужна, по какой-то причине она просто работает. Но если вы попытаетесь вызвать extern «C» определенные функции из вашего кода C ++ или C в вашей сборке, 32-битная не будет связываться и будет жаловаться на неразрешенные символы, независимо от определения символа EXTERN: PROC в вашем ассемблере.
Это какая-то странная устаревшая 32-битная вещь по сравнению с 64-битной.
Кроме того, по вашему вопросу, я думаю, что вы просто хотите объявить ваши функции asm PUBLIC, просто «PUBLIC functionname» в вашем asm, и тогда вам не нужен заголовок или что-то для них, просто определите их с помощью «extern» или extern «C» в вызывающем коде C / C ++, и он найдет их в объекте сборки и ссылке.