![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AV в API callback
RWolf © (2011-02-16 12:08:00)Что не так в нижеприведённом коде?
procedure EnumerateWindows(const sl: TStrings);
function EnumWindowProc(Handle: THandle; lParam: integer): BOOL; stdcall;
var
nread: DWORD;
buf: array[1..256] of Char;
wt: string;
begin
result := True;
nread := GetWindowText(Handle, @buf, 256);
if nread <> 0 then begin
SetLength(wt, nread);
move(buf[1], wt[1], nread);
sl.Add(wt);
end;
end;
begin
sl.Clear;
EnumWindows(@EnumWindowProc, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumerateWindows(memo1.Lines);
end;
---------------------------
'Access violation at address 004504CE in module 'Project1.exe'. Read of address 000000A0'.
---------------------------
RWolf (2011-02-16 12:55:00) [1]
> DiamondShark © (16.02.11 12:52) [2]
нормально; это я не подумал, что стек сдвинется.
Передача контекста (т.е. sl) через параметр EnumWindows'а помогла.
DiamondShark (2011-02-16 12:52:00) [2]Вложенную функцию как колбэк передавать?
Свежо.
clickmaker (2011-02-16 12:14:00) [3]nread := GetWindowTextLength(Handle);
SetLength(wt, nread);
GetWindowText(Handle, PChar(wt), nread);