gpt4 book ai didi

perl - 从 XS 访问存储在 perl 对象(祝福散列)中的值

转载 作者:行者123 更新时间:2023-12-04 11:39:07 24 4
gpt4 key购买 nike

我有一个像这样的 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;

关于perl - 从 XS 访问存储在 perl 对象(祝福散列)中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com