Dans xp 32bit cette ligne compile avec pas le problème mais dans vista 64bit cette ligne:overdrive stdcall par visual studio?
m_FuncAddr = ::GetProcAddress (somthing);
donne l'erreur suivante
erreur C2440: '=': ne peut pas convertir 'FARPROC' à 'int (__cdecl *) (void)'
GetProcAddress est défini comme
WINBASEAPI FARPROC WINAPI GetProcAddress (somthing)
Et m_FuncAddr comme
int (WINAPI *m_FuncAddr)();
D'après ce que je comprends les deux sont des années stdcall.
Pour éviter l'erreur que je devais mettre
m_FuncAddr = (int (__cdecl *)(void))::GetProcAddress(somthing);
Ma question:
Si les deux m_FuncAddr et GetProcAddress ont la convention d'appel stdcall pourquoi dois-je « rappel » avec cdecl?
Est-il possible que le projet VS réglage « par défaut de convention d'appel (qui est définie à CDECL) sur-surfe sur la statment de assignemet ci-dessus?
Merci d'avance!
[Modifier]
Pour clerfiy la question:
D'un côté de l'équation (disons côté 1) j'ai
int __stdcall * m_FuncAddr
De l'autre côté (côté 2)
INT_PTR far __stdcall GetProcAddress
Alors, comment est-ce que je dois jeter côté 2 avec cdecl si les deux sont stdcalls? Ou est-ce que je ne reçois pas quelque chose?
Ma réponse est toujours debout après votre édition, int et INT_PTR sont très différents dans les versions 64 bits! –
Dans le cas où vous vérifiez seulement l'onglet "réponses", s'il vous plaît voir mon édition ci-dessous. –