簡體   English   中英

在MASM中調用C ++函數

[英]Calling C++ functions in MASM

我正在開發一個使用MASM調用某些C ++函數的程序。 我在一個單獨的文件中定義了對2個整數求和並顯示輸出。

目前,我無法讓'main.cpp'運行asmMain()從'main.cpp'調用函數。

代碼庫

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

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 << "\nThe second number = ";
    int newint;
    cin >> newint;

    return newint;
}

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

我得到的當前代碼錯誤是這樣的:

開始構建:項目:Project_Name,配置:調試Win32
main.cpp
code.obj:錯誤LNK2019:函數_asmMain中引用的未解析的外部符號_promptFirst

關於如何解決此問題的任何提示?

問題在於C ++編譯器會破壞符號 ,這是extern "C"構造背后的原因之一,因此不會破壞符號。

如果將函數聲明為extern "C"則編譯器將不會修改名稱,就像對調用的匯編器函數所做的那樣。

在目標文件上使用dumpbin.exe獲取C ++函數的錯誤名稱。

或使用C ++代碼中的函數聲明中的extern "C"來請求帶有C鏈接的符號。

然后,您將知道在匯編代碼中要調用的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM