从XS访问存储在perl对象(祝福散列)中的值
发布时间:2020-12-16 06:22:15 所属栏目:大数据 来源:网络整理
导读:我有一个像这样的perl对象(祝福哈希的引用). sub funcname { #some code}my $o = My::Class-new();$o-{internal_data} = funcname; #I know it is not nice 在XS代码中的某个地方,我有$o引用,我需要获得$o- {internal_data}的值. /* at some point in XS co
我有一个像这样的perl对象(祝福哈希的引用).
sub funcname { #some code } my $o = My::Class->new(); $o->{internal_data} = &;funcname; #I know it is not nice 在XS代码中的某个地方,我有$o引用,我需要获得$o-> {internal_data}的值. /* at some point in XS code */ SV *obj = ... /* $o value passed to a XS function */ SV *func; ... /* here I do not know how to load $o->{internal_data} value into func */ ... call_sv(func,G_SCALAR); perl中可能还有一些章节(api | xstut | guts | ???).我只是无法找到它. 提前感谢任何提示. – 解决方法
SvRV将从引用中获取哈希值(作为SV *),MUTABLE_HV将其转换为HV *,hv_fetch / hv_fetchs将从哈希中获取.
SV* self; SV* obj_sv; HV* obj_hv; SV** callback_ptr; SV* callback; self = ...; SvGETMAGIC(self); if (!SvROK(self)) croak("Not a reference"); obj_sv = SvRV(self); if (SvTYPE(obj_sv) != SVt_PVHV) croak("Not a reference to a hash"); obj_hv = MUTABLE_HV(obj_sv); callback_ptr = hv_fetchs(obj_hv,"internal_data",0); if (!callback_ptr) croak("Malformed object"); callback = *callback_ptr; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |