ActivePerl Reference писал(а):Win32::GetProcAddress(INSTANCE, PROCNAME)[EXT] Returns the address of a function inside a loaded library. The information about what you can do with this address has been lost in the mist of time.
Если бы в perl можно было напрямую работать со стеком и вызывать функций по указателю, то нам не пришлось бы лезть в C. Однако, по вполне понятным причинам такого механизма в perl нет. И, во всяком случае, если вы знаете что такое стек и как с ним работать, то несколько строк на C вас нисколько не испугают. В общем решение здесь одно - создать модуль, через который программа на perl получит доступ к нужным функциям WinAPI.
use Win32::API;
use Win32::API::Callback;
Win32::API->Import("user32", "EnumWindows", "KN", "N");
sub _EnumWindows {
EnumWindows (Win32::API::Callback->new(
sub { my($hWnd, $lParam) = @_; &$lParam($hWnd); return 1; },
"NP", "N"), shift);
}
$handler = sub {print shift;};
&$handler("foo!"); #работает как надо
_EnumWindows ($handler); #не работает
_EnumWindows (\$handler); #тоже не работает
Сейчас этот форум просматривают: SemrushBot и гости: 51