如何指定vc11 lambda调用约定

时间:2013-01-05 06:25:53

标签: c++ visual-c++ c++11 lambda calling-convention

我想将嵌套在类中的lambda函数指针传递给Windows API回调函数。我发现没有地方可以指定__stdcall关键字。有些人告诉我,编译只支持__cdecl,但在我使用nm命令转储obj文件之后,我发现编译将生成三个辅助函数(__stdcall__cdecl,{{ 1}})同时。所以我的问题是,如何指定调用约定?

以下代码是我的测试代码。

__fastcall
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    auto func = [](){};
    return 0;
}

1 个答案:

答案 0 :(得分:17)

施展它:

WinApiFunc(static_cast<void(__stdcall *)()>(func));

首先将其存储到局部变量中:

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