Я работаю на Visual Studio проект Project A (который генерирует статический LIB на компиляции)Значение ESP не было должным образом сохраняются при вызове функции
имеет класс
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, но я не знаю, какой-то другой функции становится называется, которые определены в projectBclass (скажем 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.
заранее спасибо
Предполагаю, что вы на самом деле не создали объект класса projectAclass, потому что он абстрактный. – doctorlove
Предупреждение отладчика является лишь побочным эффектом вызванной неправильной функции. Непонятно, почему это происходит, но, конечно, вы никогда не можете вызвать funct4() в объекте projectAclass, он не имеет этой функции и является абстрактным, поэтому никогда не может быть создан, поэтому информация в этом вопросе не может быть точным. –
@ HansPassant Сэр, можете ли вы рассказать мне, как исправить это исключение (ESP был не правильно ....) – Euler