|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andy Fedotov 2:5020/732 15 Oct 2000 19:41:48 To : Fedor Lizunkov Subject : Re: perl, C --------------------------------------------------------------------------------
> Тут пожалуйста продолжите, чтобы потом можно было получить со стека этот
> чертов указатель на av и работать с ним, типа получить размер массива и
> доступ к его содержимому ...
А почему ты не пользуешьcя xsub ? Зачем влоб на C писать, когда можно
написать на xs, и прогнать через xsubpp препроцессор ? Как минимум с
аргументами и возвращаемыми типами данных проще будет.
Вообще в твоем случае наверное так:
XS(perl_Cfunc)
{
dXSARGS;
{
SV *array_ref = ST(0); // сняли со стека аргументов 1-й аргумент -
// array reference, являющийся Scalar Value.
AV *array;
SV **scalar;
STRLEN len;
I32 i;
array = (AV *) SvRV(array_ref); // дереференснули reference на array,
// и получили собственно сам array.
// далее в цикле печатаем по-очереди значения всех элементов этого
// array.
for(i=0;i<=av_len(array);i++) {
scalar = av_fetch(array,i,0);
printf("Value %d = '%s'\n",i,SvPV(*scalar,len));
}
}
XSRETURN_EMPTY;
}
Вот тут все написано:
man perlxs
man perlxstut
man perlguts
--
see u.. af.
--- tin/1.4.1-19991201 ("Polish") (UNIX) (Linux/2.0.36 (i486))
* Origin: Каждой твари по витой паре (2:5020/732@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/13387f573aeda.html, оценка из 5, голосов 10
|