La valeur de l'ESP n'a pas été correctement enregistrées à travers un appel de fonction
Je suis en train de travailler sur un projet Visual studio
Projet (qui génère une lib statique à la compilation)
a une classe
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
};
Projet B(qui génère une DLL à la compilation)
#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 }
};
Maintenant à partir de la fonction principale créée dans un autre projet, j'ai créé un objet de la classe projectAclass et en essayant d'appeler la fonction funct1 mais je ne sais pas une autre fonction est appelé, qui sont définies dans projectBclass (disons funct4) quand je suis en train de déboguer la solution et après le retour de funct4 j'obtiens cette erreur
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.
Merci d'avance
- Je suppose que vous ne l'avez pas fait "créé un objet de la classe projectAclass" parce qu'elle est abstraite.
- Le débogueur d'avertissement est juste un effet secondaire de la mauvaise fonction appelé. Il est tout à fait difficile de comprendre pourquoi ce qui se passe, mais bien sûr, vous pouvez ne jamais appeler funct4() sur un projectAclass objet, il ne dispose pas de cette fonction et est abstraite peut donc jamais être créé, donc l'info à cette question ne peut pas être précis.
- Monsieur pouvez-vous me dire comment résoudre cette exception(ESP n'était pas correctement....)
- Le declspec d'exportation de la classe de base trop?
- Nope
Vous devez vous connecter pour publier un commentaire.
Parfois, vous avez la les conventions d'appel mal. Parfois une reconstruction de tout ce qui fera le tri.
Assurez-vous que la bibliothèque statique qui est lié à votre fichier dll, dll et (parce que vous êtes la création d'une DLL C++) de votre application ont la même configuration de build (DEBUG/RELEASE).
Vérifier le préprocesseur drapeaux dans votre projet. Mal de préprocesseur indicateurs peuvent conduire à différentes virtuel pointeur de fonction des tables et, par conséquent, il peut facilement arriver que la mauvaise fonction est appelée.