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