Значение ESP не было правильно сохранено во время вызова функции

Я работаю над проектом 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 но я не знаю, какая-то другая функция вызывается, которые определены в 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.

заранее спасибо

1

Решение

Иногда у вас есть соглашения о вызовах неправильно. Иногда перестройка всего будет сортировать это.

2

Другие решения

Убедитесь, что статическая библиотека, которая связана с вашей dll, dll и (поскольку вы создаете C ++ DLL), ваше приложение имеют одинаковую конфигурацию сборки (DEBUG / RELEASE).
Проверьте флаги препроцессора в вашем проекте. Неправильные флаги препроцессора могут привести к различным таблицам указателей виртуальных функций, и поэтому может легко случиться, что вызвана неправильная функция.

2

По вопросам рекламы [email protected]