可能重复:
Weird MSC 8.0 error: “The value of ESP was not properly saved across a function call…”
我有一个OBJ文件,我没有任何源代码。我在另一个项目中使用它没有任何问题。现在我试图在另一个项目中使用它。这是我宣布它的方式:
extern "C" bool FileCompare(char* file1, char* file2);
我在这样的函数中使用它:
void myFunction() {
//some code
FileCompare(file1, file2); // file1 and 2 are char arrays
}
然后在我的主代码中我调用myFunction:
int main() {
... some code
myFunction()
}
当myFunction返回时,我得到“ESP的值未在函数调用中正确保存。”在Visual Studio 2010调试器中。但是,我知道FileCompares(obj文件中的函数)可以完成它的工作。当我发表评论时,一切正常。我过去使用过这个OBJ文件没有任何问题。考虑到我没有obj文件的来源,我可以做些什么试图“修补”这个问题吗?
非常感谢
更多细节:我怀疑代码使用不带RET的CALL(用汇编语言编写)。
编辑:我不知道我所说的内容是否合理,但由于函数会破坏esp,无论如何都要保存并在函数返回后恢复它?
答案 0 :(得分:4)
这可能是由于FileCompare()
中的错误或myFunction()
和/或FileCompare()
的声明和实施之间的调用惯例不匹配。
您可以在__cdecl
的原型上使用适当的说明符(例如,FileCompare()
}来解决问题。或者您可能需要为FileCompare()
函数创建一个汇编语言包装器来修复问题(因为您说您不再拥有FileCompare()
的源代码。)
确定没有FileCompare()
源的确切错误可能需要在调试器中逐步完成程序集。
答案 1 :(得分:4)
当我在针对旧头文件编译一个项目时,我遇到了类似的问题,该文件与最新的一个虚拟函数不同。