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