在MASM中调用C++函数

2022-09-05 00:00:00 assembly linker c++ masm

我正在开发一个程序,该程序将使用MASM调用一些C++函数。我在一个单独的文件中定义了对2个整数求和并显示输出。

目前,我无法让‘main.cpp’运行asmMain()从‘main.cpp’调用函数。

code.asm

; ---------------------------------------
    
promptFirst PROTO C
promptSecond PROTO C
printInt PROTO C

.586
.model flat, stdcall

.stack 4096

; ---------------------------------------

.DATA

first DWORD 0
second DWORD 0

; --------------------------------

.CODE

asmMain PROC C  
    mov first, promptFirst              
    ret 
asmMain ENDP

PUBLIC asmMain  
END

main.cpp

#include <iostream>

using namespace std;

void asmMain();

int promptFirst();
int promptSecond();
void printInt(int myint);
    
int main() {
    asmMain();
}

int promptFirst() {
    cout << " The first number = ";
    int newint;
    cin >> newint;

    return newint;
}

int promptSecond() {
    cout << "
The second number = ";
    int newint;
    cin >> newint;

    return newint;
}

void printInt(int myint) {
    cout << myint;
}

我在当前代码中得到的错误如下:

已开始生成:项目:PROJECT_NAME,配置:调试Win32
Main.cpp
Code.obj:错误LNK2019:Function_asmMain中引用的第一个外部Symbol_PromptFirst未解析

有关如何解决此问题的任何提示?


解决方案

问题在于C++编译器mangles the symbols,这是extern "C"构造背后的原因之一,因此符号不会损坏。

如果将函数声明为extern "C",则编译器不会损坏名称,就像您对所调用的汇编函数所做的那样。

相关文章