【发布时间】:2011-11-13 22:56:02
【问题描述】:
我写一些内联函数是为了好玩,它会抛出一个我以前从未遇到过的异常。有趣的是,如果我继续,在异常停止了我的程序的执行流程之后,它将返回两个整数的和。
__declspec(dllexport) int addintegers(int one, int two)
{
int answer = 0;
__asm
{
mov eax, 0
push two
push one
call add
mov answer, eax
}
return answer;
} // Debugger stops here with exception message
异常消息:
运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是用一个调用约定声明的函数和一个用不同调用约定声明的函数指针调用的结果。
// add function definition
int add(int one, int two)
{
return one + two;
}
【问题讨论】:
-
给微软买一支雪茄,让你远离麻烦。你要么必须让你的 add() 函数 __stdcall 要么你必须在调用后自己清理堆栈,两次弹出。
-
我确实有add的定义
标签: c++ visual-studio-2010 inline inline-assembly