我目前正在学习技巧,并且在调用外部函数时遇到问题。

我在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

最佳答案

除其他外,您在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++

关于c++ - 如何从masm引用外部C++函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55906684/

10-11 16:35