[英]Calling a library made in MASM to C or C++
我一直试图在C中调用由masm制作的库。 我设法从程序集MASM制作一个.lib文件。 但我不知道如何将其称为C语言库。 这是.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);
}
天啊。 巨大的陷阱。 在Visual Studio中的32位masm .asm文件中,“。model flat,c”是至关重要的。 特别是“ c”。 64位masm汇编由于某种原因不需要它,因此可以正常工作。 但是,如果您尝试从程序集中的C ++或C代码中调用extern“ C”定义的函数,则32位将不会链接,并且它将抱怨未解析的符号,无论在您的asm中定义了EXTERN符号:PROC。
与64位相比,这是一种奇怪的传统32位。
除此之外,对于您的问题,我想您只想在asm中声明您的asm函数PUBLIC,只需声明“ PUBLIC函数名”,然后就不需要它们的标头或任何内容,只需使用“ extern”或在调用的C / C ++代码中使用extern“ C”,它将在汇编对象和链接中找到它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.