3

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' );

アイデア?

4

2 に答える 2

2

関数から返すのではなく、返したい値をスタックにプッシュする必要があると思いますが、私はSWIGではなくXSに慣れています。

于 2009-06-26T23:20:11.107 に答える
2

perlxstutの例6をご覧ください。一連のハッシュを作成し、それらを配列に追加します。最後に、配列への参照を返します。ハッシュを返した場合も、実質的に同じように機能します。

于 2009-06-27T17:17:31.550 に答える