如何使用SWIG在C中构建Perl哈希?

时间:2009-06-26 22:11:31

标签: c perl swig

我正在尝试从C库中创建Perl哈希。这是我到目前为止所得到的:

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 个答案:

答案 0 :(得分:2)

我相信你必须将你想要返回的值推到堆栈上,而不是从函数中返回它,但我习惯于XS而不是SWIG。

答案 1 :(得分:2)

查看perlxstut的示例6。它创建了一堆哈希并将它们添加到数组中。最后,它返回对数组的引用。如果你返回一个哈希值,它几乎可以正常工作。