Как мне создать хэш Perl на C, используя SWIG?
Вопрос
Я пытаюсь создать хеш 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' );
Идеи?
Решение
взгляните на пример 6 из Перлксстут.Он создает кучу хешей и добавляет их в массив.В конце он возвращает ссылку на массив.Это будет работать практически так же, если вы вернете хеш.
Другие советы
Я считаю, что вы должны поместить значение, которое хотите вернуть, в стек, а не возвращать его из функции, но я привык к XS, а не к SWIG.
Не связан с StackOverflow