comment spécifier la convention d’appel vc11 lambda

Je souhaite passer un pointeur de fonction lambda, qui est nested dans une classe, à la fonction de rappel de l’API Windows. J’ai trouvé qu’il n’y a pas de place pour moi pour spécifier le mot clé __stdcall . Certaines personnes m’ont dit que la compilation ne supporte que __cdecl , mais après avoir utilisé la commande nm pour dump le fichier obj, j’ai trouvé que la compilation génèrerait trois fonctions d’assistance ( __stdcall , __cdecl , __fastcall ) simultanément. Mon problème est donc, comment puis-je spécifier la convention d’appel?

Les codes suivants sont mon code de test.

 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { auto func = [](){}; return 0; } 
 00000000 t ?@@@CAXXZ 00000000 t ?@@@CIXXZ 00000000 t ?@@@CGXXZ 00000000 t ??B@@QBEP6AXXZXZ 00000000 t ??B@@QBEP6GXXZXZ 00000000 t ??B@@QBEP6IXXZXZ 00000000 t ??R@@QBEXXZ 

Jeté le:

 WinApiFunc(static_cast(func)); 

Ou stockez-le d’abord dans une variable locale:

 void (__stdcall *funcp)() = func; WinApiFunc(funcp);