![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| fk0 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.6.2008 Репутация: нет Всего: нет |
Есть структура, например:
typedef struct { int x; int y; } point; Есть функция которая возвращает массив: int get_points(point **retval, arguments...); Массив в retval (память выделяется), возвращаемое значение — длина (элементов). Как это проще превратить во что-то с чем сможет работать perl и сделать также, что perl не забыл сделать free(*retval) потом ? Вообще как в perl работать с такими типами данных. Я вижу два способа: либо получить массив хешей (но это ж и память и CPU отъедает ни на что), либо для каждого элемента структуры отдельный массив. Последнее кажется не самым дурацким решением (Class::Struct предлагает 2 варианта, как я понимаю). Может проще не морочить голову, а сделать (s)printf с перловым кодом на выходе (в качестве результата C функции) который потом пропустить через eval — чем не решение? Ввиду того, что XS без ганжи не осилить, swig похоже тоже... |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
учите xs, проще.
|
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
На cpan-e даже Cookbook по xs есть.
1я часть http://www.cpan.org/authors/Dean_Roehrich/...19960430.tar.gz и рядом -- вторая А вообще -- perlxs, perlxstut, perlguts |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
для того, чтобы perl управлялся с вашими структурами как со своими (не забывал, например, освободить память),
вам надо ваши переменные оформить как структуры perl (SV, AV, HV), иначе вам надо будет взять на себя работы с ними. можете возвращать ваш кусок памяти именно как кусок (SV), минимальный оверхед, perl прибъет, когда надо, но работать с ним вам надо будет самому, например через pack/unpack. если это то, что вам надо, используйте. imho это неудобно, как минимум. |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Есть еще Inline::C
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Как одноразовый хак - eval'те, самое простое. Но "это ж и память и CPU отъедает ни на что".
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |