3
我想从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');
想法?
这是否意味着我必须使用汇编器将其推入堆栈? (bleah!)还是有其他一些机制? – Leonard 2009-06-27 02:47:52
嗯。在perlguts和perlxstut中阅读更多内容之后,我意识到你正在讨论将它推到Perl堆栈上。我试过 XPUSHs(sv_2mortal(newRV_noinc((SV *)hv))); 但得到该行编译错误: PROC/tools.c:在功能`do_get_test_hash ': PROC/tools.c:306:错误:'SP' 未声明(第一次在这个函数中使用) 不知道这是关于什么... – Leonard 2009-06-27 04:10:12