我正在开发一个程序,它将使用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
#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
有关如何解决此问题的任何提示?
答案 0 :(得分:2)
问题在于C ++编译器mangles the symbols,这是extern "C"
构造背后的原因之一,因此符号不会被破坏。
如果将函数声明为extern "C"
,则编译器不会破坏名称,就像使用您调用的汇编程序函数一样。
答案 1 :(得分:2)