Как я могу ссылаться на внешнюю функцию C ++ из MASM - PullRequest
1 голос
/ 29 апреля 2019

В настоящее время я изучаю MASM, и у меня возникла проблема с вызовом внешней функции.

У меня есть функция в c ++, которая называется writei, она получает uint64 и выводит ее.

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

Я пытался «извлечь» и вызвать его из файла .asm, но компилятор выдает «неразрешенный внешний символ writei, на который ссылается функция mai».

это код 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 Ответ

1 голос
/ 29 апреля 2019

Помимо прочего, вам нужно "extern C" в вашем объявлении метода C ++.

Например:

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

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

Вот хорошая статья, которая объясняет это более подробно:

FAQ по ISO C ++: как смешивать C и C ++

...