EnumChildWindows and lambda
EnumChildWindows and lambda
当我尝试在 MinGW 4.6.2 上编译以下内容时
EnumChildWindows(hwnd, [](HWND, LPARAM) -> BOOL { return TRUE; }, 0);
我得到
error: cannot convert '<lambda(HWND, LPARAM)>'
to 'ENUMWINDOWSPROC {aka int (*)(HWND__*,long int)}'
for argument '2' to 'BOOL EnumChildWindows(HWND, ENUMWINDOWSPROC, LPARAM)'
我是否正确地声明了 lambda,或者这根本不起作用?回调的 MS 定义是
BOOL CALLBACK EnumChildProc(
__in HWND hwnd,
__in LPARAM lParam
);
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633493%28v=vs.85%29.aspx
是调用约定导致问题吗?
布尔回调 EnumChildProc(...)
这就是问题所在,CALLBACK 宏将 __stdcall 属性应用于函数以更改默认设置的调用约定。 这在大多数程序中都是__cdecl的。 您无法控制 lambda 的调用约定,只能通过更改全局设置(/Gz 编译选项)来控制。 这可能会产生比你关心的更多的副作用,放弃这个lamda。
顺便说一句,64 位代码不是问题。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- C++: Template and Lambda
- std::max with lambda and auto
- Qt Slots and C++11 lambda
- EnumChildWindows and lambda
- 使用for_each()AND lambda函数打印C样式数组的Template函数
- std::array and lambda