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

C++ 函数调用中未正确保存ESP的值,c++,visual-studio-2010,visual-c++,runtime-error,projects-and-solutions,C++,Visual Studio 2010,Visual C++,Runtime Error,Projects And Solutions,我正在从事一个VisualStudio项目 在编译时生成静态库的项目 #define projectBclass_DLL __declspec( dllexport ) class projectBclass_DLL projectBclass: public mynamespace::projectAclass { //Definitions of the 3 pure virtual functions are here int funct1() { //definit

我正在从事一个VisualStudio项目 在编译时生成静态库的项目

#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    }
};
他有一门课

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
};
编译时生成DLL的项目B

#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函数,但我不知道会调用ProjectB类中定义的其他函数,比如说funct4,当我尝试调试解决方案时,从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.

提前谢谢

有时候你会弄错。有时,重建所有东西都会对它进行排序。

有时,你的答案是错误的。有时,对所有内容的重建将对其进行排序。

< P>确保链接到DLL的静态库、DLL和创建C++ DLL的应用程序具有相同的构建配置调试/发布。
检查项目中的预处理器标志。错误的预处理器标志可能导致不同的虚拟函数指针表,因此很容易发生调用错误函数的情况

> P>确保与DLL链接的静态库、DLL和创建C++ DLL的应用程序具有相同的构建配置调试/发布。
检查项目中的预处理器标志。错误的预处理器标志可能导致不同的虚拟函数指针表,因此很容易发生调用错误函数的情况

我假定您实际上没有创建projectAclass类的对象,因为它是抽象的。调试器警告只是调用错误函数的副作用。我们完全不清楚为什么会发生这种情况,但当然,您永远不能在projectAclass对象上调用funct4,它没有此函数,而且是抽象的,因此永远无法创建,所以这个问题中的信息不可能是准确的。@HansPassant先生,你能告诉我如何修复这个异常吗sp没有正确地…declspec也导出基类吗?我猜你实际上没有创建projectAclass类的对象,因为它是抽象的。调试器警告只是错误函数获取的副作用打电话。我们完全不清楚为什么会发生这种情况,但当然,您永远不能在projectAclass对象上调用funct4,它没有此函数,而且是抽象的,因此永远无法创建,所以这个问题中的信息不可能是准确的。@HansPassant先生,你能告诉我如何修复这个异常吗sp没有正确地…declspec是否也导出了基类?我已经检查了所有具有相同的生成配置,但它仍然给出了该异常。我已经检查了所有具有相同的生成配置,但它仍然给出了该异常例外