PDA

View Full Version : [C++] Errore solo in VC++ 2008...


Tommo
04-04-2008, 20:33
Salve,
oggi ho scaricato & settato lo SDK di Ogre3D precompilato per VC++ 2008, e venivo da VC++2005 (ovviamente).

Vado a rebuildare e tutto funziona... ma a runtime, dopo l'inizializzazione...


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.


E non so assolutamente cosa intenda... ESP è una variabile inesistente in tutti i files che includo, non uso puntatori a funzione e le uniche calling conventions sono _declspec(dllexport) e quella default...

Cosa sta cercando di dirmi? :mbe:
Grazie :D

gugoXX
04-04-2008, 20:39
Mmmh.
Secondo me vuol dire che hai chiamato una funzione della libreria, per mezzo di puntatori a funzione, con un numero di parametri diversi da quelli che si aspetta.
ESP e' il puntatore allo stack.

Tommo
04-04-2008, 20:46
E' che non uso alcun puntatore a funzione... dunque una delle tante librerie dev'essere in conflitto con il nuovo Ogre :doh:

cionci
05-04-2008, 09:10
Dai un bel clean al progetto e riprova.

kernel::panic
05-04-2008, 10:26
Le calling conventions determinano l'ordine con cui i parametri di una funzione vengono caricati nello stack (da dx a sx o viceversa) e chi (tra la funzione chiamante e la chiamata) deve rimuoverli dallo stack alla fine dell'esecuzione.

Nel C++ di default la convenzione è __cdecl, mentre le callback delle api di Windows sono __stdcall.

Qui ci sono delle info: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=302

Ora, mi sembra di aver letto da qualche parte, che dal VS2005 al 2008 la convenzione di default è cambiata... il settaggio lo trovi nella configurazione del progetto in:

C/C++ -> Advanced -> Calling Convention

Prova a mettere lo stesso valore che c'era sul 2005



Mmmh.
Secondo me vuol dire che hai chiamato una funzione della libreria, per mezzo di puntatori a funzione.


E' molto probabile, se no il compilatore se ne sarebbe accorto.

Tommo
05-04-2008, 10:36
Ho risolto!

Era la libreria MyGUI, che, gestendo puntatori a metodi di Ogre3D, non ne ha gradito l'aggiornamento a VC2008... ora l'ho ricompilata e funziona :D

Ciao e grazie a tutti :D