Вызов библиотеки из MASM для C или переполнение стека

Я пытался вызвать библиотеку в C, которая была сделана в MAM.
Мне удалось сделать .lib файл из сборки MASM.
Но я понятия не имею, как назвать это языком Си как библиотеку.
Вот файл .lib
https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib

Нужна помощь.
Спасибо

0

Решение

Основная идея довольно проста:

  1. Напишите (внешне видимые) функции на ассемблере, используя соглашение о вызовах C.
  2. Напишите C-совместимый прототип / объявление для каждой функции.
  3. Вызовите функции по мере необходимости.

Общая идея выглядит примерно так (предупреждение: непроверенный код):

; 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);
}
0

Другие решения

О чувак. Огромная ошибка на этом. В 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 ++, и он найдет их в объекте сборки и ссылке.

0

По вопросам рекламы [email protected]