加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从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 | ???).我只是无法找到它.

提前感谢任何提示.


KMX

解决方法

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读