在 MASM 中调用 C++ 函数
Calling C++ functions in 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 << "\nThe second number = ";
int newint;
cin >> newint;
return newint;
}
void printInt(int myint) {
cout << myint;
}
我得到的当前代码的错误是这样的:
Build started: Project: Project_Name, Configuration: Debug Win32
main.cpp
code.obj: error LNK2019: unresolved external symbol _promptFirst referenced in function _asmMain
关于如何解决这个问题的任何提示?
问题在于 C++ 编译器 mangles the symbols,这是 extern "C"
构造背后的原因之一,因此符号不会被破坏。
如果您将函数声明为 extern "C"
,那么编译器将不会破坏名称,就像您对调用的汇编函数所做的那样。
在目标文件上使用 dumpbin.exe
来获取 C++ 函数的损坏名称。
或者在 C++ 代码中的函数声明中使用 extern "C"
请求带有 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 << "\nThe second number = ";
int newint;
cin >> newint;
return newint;
}
void printInt(int myint) {
cout << myint;
}
我得到的当前代码的错误是这样的:
Build started: Project: Project_Name, Configuration: Debug Win32
main.cpp
code.obj: error LNK2019: unresolved external symbol _promptFirst referenced in function _asmMain
关于如何解决这个问题的任何提示?
问题在于 C++ 编译器 mangles the symbols,这是 extern "C"
构造背后的原因之一,因此符号不会被破坏。
如果您将函数声明为 extern "C"
,那么编译器将不会破坏名称,就像您对调用的汇编函数所做的那样。
在目标文件上使用 dumpbin.exe
来获取 C++ 函数的损坏名称。
或者在 C++ 代码中的函数声明中使用 extern "C"
请求带有 C 链接的符号。
然后你就会知道在你的汇编代码中调用什么了。