我一直试图在c中调用一个用masm制作的库。 我已经设法从程序集MASM创建一个.lib文件。 但我不知道如何将其称为C语言作为库。 这是.lib文件 https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib
需要帮助。 感谢
答案 0 :(得分:0)
基本想法很简单:
总体思路看起来像这样(警告:未经测试的代码):
; 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);
}
答案 1 :(得分:0)
哦,伙计。这个问题很严重。在visual studio中的32位masm .asm文件中,那个" .model flat,c"很关键。特别是" c"。由于某种原因,64位masm汇编并不需要它。但如果你试着打电话给extern" C"从程序集中的C ++或C代码定义函数,32位赢得链接,它会抱怨未解析的符号,无论在asm中定义EXTERN符号:PROC。
与64位相比,这是一种奇怪的传统32位事物。
除此之外,对于你的问题,我认为你只想声明你的asm函数PUBLIC,只是" PUBLIC functionname"在你的asm中,然后你不需要标题或任何东西,只需用" extern"来定义它们。或者extern" C"在您调用的C / C ++代码中,它将在汇编对象和链接中找到它们。