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

Perl的XSUB怎么会死?

发布时间:2020-12-16 06:25:45 所属栏目:大数据 来源:网络整理
导读:我为C库编写了一个Perl XS包装器,包含大约80个 功能.现在我的总体策略是用C代替错误 PL_sv_undef函数和调用Perl代码必须明确检查 是否退货不是undef. (对于某些C函数,它更复杂 因为我将他们的输出转换为HV / AV并使用空列表来报告错误.) 现在,当我开始使用该
我为C库编写了一个Perl XS包装器,包含大约80个
功能.现在我的总体策略是用C代替错误
PL_sv_undef函数和调用Perl代码必须明确检查
是否退货不是undef. (对于某些C函数,它更复杂
因为我将他们的输出转换为HV / AV并使用空列表来报告错误.)

现在,当我开始使用该库编写更大的Perl脚本时,我想
简化错误处理和使用例如通常的eval {} / die异常
处理错误的机制.

目前,我的XS中的简单XSUB看起来像这样:

SV *
simple_function( param1,param2 = 0,param3 = 0)
        int             param1
        int             param2
        int             param3
        CODE:
                int rc;
                rc = simple_function( param1,param2,param3 );
                RETVAL = (rc == 0) ? &PL_sv_yes : &PL_sv_undef;
        OUTPUT:
                RETVAL

我已经看到一些模块有像“RaiseError”这样的全局标志
错误,但没有找到任何我可以借用的例子.我拥有的几个模块
发现.pm内部处理“RaiseError”标志,而不是.xs内部
因此允许使用Perl的模具.在我的情况下,这很难
在.pm内部实现,因为许多函数需要特殊的错误检查.那
由于检查已经存在于XS中,因此也会导致代码重复.

我在perlxs/perlguts文档中找不到任何相关内容.特别是,我已经看到从我的.xs生成的.c中调用Perl_croak(),但未能找到该函数的任何文档.

什么是Perl’s die的XS模拟?或者XSUB如何向Perl报告
运行时函数失败并且没有RETVAL返回?如何正确设置$@?

解决方法

perlpicheak()在perlapi手册页上记录为 here.如该页面上的示例所示,您可以向其传递消息字符串,也可以手动将$@设置为异常对象并传递NULL.

(编辑:李大同)

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

    推荐文章
      热点阅读