我如何从masm引用外部C ++函数?

时间:2019-04-29 15:42:54

标签: c++ visual-c++ masm

我目前正在学习masm,但是在调用外部函数时遇到问题。

我在c ++中有一个称为writei的函数,它接收一个uint64并将其输出。

int writei(uint64_t a)
{
    cout << a;
    return 1;
}

我尝试从.asm文件中“提取”并调用它,但编译器抛出“在函数mai中引用的未解析的外部符号writei”。

这是masm代码(我正在使用Visual Studio 2019)

extern writei : proto


.code
mai proc
    push rbp
    push rsp
    mov ecx,3
    call writei
    pop rsp
    pop rbp
    ret
mai endp
end

1 个答案:

答案 0 :(得分:1)

在其他事情中,您需要在C ++方法声明中使用"extern C"

例如:

extern "C" {
  int writei(uint64_t a);
}

int writei(uint64_t a)
{
    cout << a;
    return 1;
}

这是一篇很好的文章,详细介绍了这一点:

ISO C++ FAQ: How to mix C and C++