在MASM中調用C++函數 [英] Calling C++ functions in MASM

查看:0
本文介紹了在MASM中調用C++函數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在開發一個程序,該程序將使用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",則編譯器不會損壞名稱,就像您對所調用的匯編函數所做的那樣。

這篇關于在MASM中調用C++函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放