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);