调用在MASM中创建的库到C或c++

Calling a library made in MASM to C or C++

本文关键字:c++ MASM 创建 调用      更新时间:2023-10-16

我一直在尝试调用一个用c语言编写的库。我已经设法从汇编MASM制作了一个.lib文件。但我不知道如何调用它到C语言作为一个库。这是.lib文件https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib

需要帮助。由于

基本思想相当简单:

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

天哪。这是一个很大的问题。在visual studio中的32位masm .asm文件中,"。模型平,c"是关键。尤其是"c"。64位masm汇编不需要它,因为某些原因,它只是工作。但是,如果您尝试从汇编中的c++或C代码调用extern"C"定义的函数,32位将无法链接,并且它会抱怨未解析的符号,无论在asm中定义extern symbol: PROC。

这是一种奇怪的传统32位和64位。

除此之外,对于你的问题,我认为你只是想声明你的asm函数PUBLIC,只是"公共函数名"在你的asm,然后你不需要一个头或任何东西,只是用"extern"或extern"C"在你的调用C/c++代码定义它们,它会在汇编对象和链接中找到它们。