使用WinAPI的时候经常有只是执行很简单功能的CallBack函数,我不想把它单独写成一个函数,这样把一个功能标记成(global) static单独悬在所有的类外面,很不好维护。于是想用lambda来简化。
但是 这些callback函数有一个共同点就是——都有一个属性叫做CALLBACK(也就是 __stdcall)。怎样才能让winAPI正确的调用lambda呢?
以下是code。调用enumwindows,显示屏幕上所有的窗口名称和hwnd
#include "iostream"
#include "windows.h"
using namespace std;
int main()
{
EnumWindows([] (HWND hwnd, LPARAM lparam) CALLBACK {
char buf[1000];
GetWindowText(hwnd, buf, 1000);
cout << buf << " hwnd= " << hex << (int)hwnd << endl;
return 1;
}
, 0);
return 0;
}
坑:如何把no capture的lambda函数转换成函数指针