Ищется способ вызывать WinAPI из ActivePerl

Все вопросы «а не подскажете, где мне найти...» обсуждаются только здесь.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Ищется способ вызывать WinAPI из ActivePerl

Сообщение tyomitch » 06.06.2006 (Вт) 15:49

что для этого нужно?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2006 (Вт) 16:05

Вон какую чудную цитату нагуглил:

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.
Изображение

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.06.2006 (Вт) 16:22

:lol: :thumleft:
Быть... или не быть. Вот. В чём вопрос?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 06.06.2006 (Вт) 16:29

По делу:

http://www.prolib.ru/cgi-bin/give/?oid=15

Сам не читал, но там есть следующее:

Если бы в perl можно было напрямую работать со стеком и вызывать функций по указателю, то нам не пришлось бы лезть в C. Однако, по вполне понятным причинам такого механизма в perl нет. И, во всяком случае, если вы знаете что такое стек и как с ним работать, то несколько строк на C вас нисколько не испугают. В общем решение здесь одно - создать модуль, через который программа на perl получит доступ к нужным функциям WinAPI.
Быть... или не быть. Вот. В чём вопрос?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2006 (Вт) 16:34

Уже нашёл http://search.cpan.org/~acalpini/Win32-API-0.41/API.pm
Что делать дальше, пока не понимаю, но видимо развязка близка.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.06.2006 (Вт) 18:23

Вроде что-то работает.
Осталось найти способ передавать в API указатель на функцию (как это называется в Перле? кажется, closure?)


Вот код, который я никак не могу заставить работать:
Код: Выделить всё
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); #тоже не работает
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.06.2006 (Вс) 20:20

Любопытный памфлет на тему XS, пропитанный идеей "все юниксоиды -- придурки, а перловики -- в особенности" ;-)

http://world.std.com/~swmcd/steven/perl ... index.html
Изображение


Вернуться в Народный поиск

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

    TopList