我有一个像这样的perl对象(祝福哈希的引用).
sub funcname {
#some code
}
my $o = My::Class->new();
$o->{internal_data} = \&funcname; #I know it is not nice
Run Code Online (Sandbox Code Playgroud)
在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);
Run Code Online (Sandbox Code Playgroud)
perl中可能还有一些章节(api | xstut | guts | ???).我只是无法找到它.
提前感谢任何提示.
- kmx
SvRV将从SV*引用中获取哈希(作为),MUTABLE_HV将其转换为a 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |