Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl -- взаимодействие с C 
:(
    Опции темы
fk0
Дата 16.8.2012, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 похоже тоже...
PM MAIL   Вверх
arto
Дата 16.8.2012, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



учите xs, проще.
PM MAIL ICQ   Вверх
vadiml
Дата 16.8.2012, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



На cpan-e даже Cookbook  по xs есть.
1я часть http://www.cpan.org/authors/Dean_Roehrich/...19960430.tar.gz
и рядом -- вторая

А вообще -- perlxs, perlxstut, perlguts

PM MAIL Jabber   Вверх
arto
Дата 17.8.2012, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



для того, чтобы perl управлялся с вашими структурами как со своими (не забывал, например, освободить память),
вам надо ваши переменные оформить как структуры perl (SV, AV, HV), иначе вам надо будет взять на себя работы с
ними. можете возвращать ваш кусок памяти именно как кусок (SV), минимальный оверхед, perl прибъет, когда надо,
но работать с ним вам надо будет самому, например через pack/unpack. если это то, что вам надо, используйте.
imho это неудобно, как минимум.
PM MAIL ICQ   Вверх
Pfailed
Дата 17.8.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Есть еще Inline::C


--------------------
PM MAIL   Вверх
DurRandir
Дата 18.8.2012, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Как одноразовый хак - eval'те, самое простое. Но "это ж и память и CPU отъедает ни на что".
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.