То, что вы показали, не может быть вашим реальным кодом. Во-первых, синтаксис, который вы используете для EnumWindows()
, неверен и не будет компилироваться как есть. Во-вторых, ошибка жалуется на листинг __closure
, а это означает, что вы пытаетесь использовать метод нестатического класса в качестве обратного вызова (который вы не можете сделать), но в указанном вами коде нет такого метода.
Это то, что код должен выглядеть следующим образом:
class TForm1 : public TForm
{
__published:
TListBox *ListBox1;
...
private:
static BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam);
...
public:
__fastcall TForm1(TComponent* Owner);
...
};
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
EnumWindows(&EnumWinProc, reinterpret_cast<LPARAM>(this));
}
BOOL CALLBACK TForm1::EnumWinProc(HWND hwnd, LPARAM lParam)
{
TCHAR title[80];
if (GetWindowText(hwnd, title, 80))
reinterpret_cast<TForm1*>(lParam)->ListBox1->Items->Add(title);
return TRUE;
}
В качестве альтернативы:
// Note: NOT a member of the TForm1 class...
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
TCHAR title[80];
if (GetWindowText(hwnd, title, 80))
reinterpret_cast<TStrings*>(lParam)->Add(title);
return TRUE;
}
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
EnumWindows(&EnumWinProc, reinterpret_cast<LPARAM>(ListBox1->Items));
}
Есть больше кода? –