Nous avons récemment tenté de diviser certains de nos projets Visual Studio en bibliothèques, et tout semblait bien se compiler et se construire dans un projet de test avec l'un des projets de bibliothèque comme dépendance. Cependant, en essayant d'exécuter l'application, nous avons reçu le message d'erreur d'exécution suivant :
Run-Time Check Failure #0 - La valeur de l'ESP n'a pas été correctement enregistrée lors d'un appel de fonction. C'est généralement le résultat de l'appel d'un pointeur de fonction déclaré avec une convention d'appel différente.
Nous n'avons même pas spécifié les conventions d'appel (__cdecl etc.) pour nos fonctions, laissant tous les commutateurs du compilateur sur la valeur par défaut. J'ai vérifié et les paramètres du projet sont cohérents pour les conventions d'appel dans la bibliothèque et les projets de test.
Mise à jour : Un de nos développeurs a changé le paramètre du projet "Basic Runtime Checks" de "Both (/RTC1, equiv. to /RTCsu)" à "Default" et le run-time a disparu, laissant le programme fonctionner apparemment correctement. Je n'ai pas du tout confiance en cela. S'agit-il d'une solution appropriée ou d'un piratage dangereux ?
4 votes
Soyez heureux que le runtime l'ait détecté pour vous. S'il ne l'avait pas fait, la prochaine chose que ferait l'ordinateur serait de déchiqueter le contenu de la pile et de se planter d'une manière épouvantable. (Déboguer une corruption de pile n'est pas pour les âmes sensibles).
0 votes
Concernant votre mise à jour : Non, ce n'est pas une bonne solution. Tout ce que vous avez fait est de désactiver les contrôles. C'est un peu comme faire l'autruche. Le problème est toujours là, et il vous explosera sans aucun doute à la figure plus tard, lorsqu'il sera encore plus difficile de le retrouver.