c++ - 如何指定 vc11 lambda 调用约定

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

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

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

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

最佳答案

转换它:

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

或者先存入局部变量:

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

关于c++ - 如何指定 vc11 lambda 调用约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14169295/

相关文章:

c++ - 插入到 unordered_map 的 unordered_map 中?

qt - 为 C++11 标准构建 Qt 项目

c++ - reference(&) 数据成员指向堆栈变量的行为

C++全局常量问题

c++ - RingBuffer 用于数据收集

visual-studio - 从命令行构建 VS2008 动态添加预处理器指令

c++ - clang++ C++11 调用

C++ 宏之谜 : Printing the name of the TYPE

c++ - 有没有办法预编译 C++ 代码以用于 node-red

c++ - 需要在 tchar.h 错误后包含 strsafe.h