Как создать хеш Perl в C, используя SWIG? - PullRequest
3 голосов
/ 27 июня 2009

Я пытаюсь создать Perl-хеш из библиотеки C. Вот что у меня так далеко:

static void add_string_to_perl_hash ( HV *hv, char * key, char *value ) {

SV *obj = sv_2mortal(newSVpv(value, 0));

hv_store(hv, (const char *)key, strlen (key), obj, 0);

SvREFCNT_inc(obj);

}

SV * do_get_test_hash () {

    static char *foo ="foo";
    static char *bar ="bar";

    HV *hv;

    hv = newHV();
    add_string_to_perl_hash ( hv, "foo",   foo);
    add_string_to_perl_hash ( hv, "bar",   bar);

    return sv_2mortal(newRV_noinc((SV*)hv));
}

Испытание: я не получаю ничего, что имеет для меня смысл:

use testlib;
use Data::Dumper;

print Dumper (testlib::do_get_test_hash());

$VAR1 = bless( do{\(my $o = 5359872)}, '_p_SV' );

Идеи

Ответы [ 2 ]

2 голосов
/ 27 июня 2009

посмотрите на пример 6 из perlxstut . Он создает кучу хэшей и добавляет их в массив. В конце он возвращает ссылку на массив. Это работало бы практически так же, если бы вы вернули хеш.

2 голосов
/ 27 июня 2009

Я считаю, что вы должны поместить значение, которое вы хотите вернуть, в стек, а не возвращать его из функции, но я привык к XS, а не к SWIG.

...