ESP的值未在函数调用中正确保存

时间:2013-07-03 10:53:42

标签: c++ visual-studio-2010 visual-c++ runtime-error projects-and-solutions

我正在开发Visual Studio项目 项目A(在编译时生成静态库)

有一个班级

using namespace mynamespace;
class projectAclass
{
  virtual int  funct1()=0;  //Pure virtual function
  virtual int funct2()=0;  //Pure virtual function
  virtual int funct3()=0;  //Pure virtual function
};

项目B(在编译时生成DLL)

#define projectBclass_DLL __declspec( dllexport )
class projectBclass_DLL projectBclass: public mynamespace::projectAclass
{
  //Definitions of the 3 pure virtual functions are here
  int funct1() 
  {
    //definition go here
  }
  //similarly for funct2 and funct3

  int funct4()
 { //Definition goes here    }
  int funct5()
 { //Definition goes here    }
  int funct6()
 { //Definition goes here    }
};

现在从其他项目创建的主要功能我创建了一个类 projectAclass 的对象,并试图调用函数 funct1 ,但我不知道其他一些函数当我试图调试解决方案并从 funct4 返回后我正在调用 projectBclass (比如funct4)中定义的我收到此错误

Run-Time Check Failure #0 - The value of ESP was not properly saved across a
function call.  This is usually a result of calling a function declared with
one calling convention with a function pointer declared with a different calling
convention.

提前致谢

2 个答案:

答案 0 :(得分:2)

有时候你有calling conventions错误。有时重建一切都会对它进行排序。

答案 1 :(得分:2)

确保链接到您的dll的静态库,dll和(因为您正在创建C ++ DLL)您的应用程序具有相同的构建配置(DEBUG / RELEASE)。 检查项目中的预处理程序标志。错误的预处理程序标志可能导致不同的虚函数指针表,因此很容易发生调用错误的函数。