XSUBs实际上不需要外部库。它们仅提供从perl空间调用c函数的能力,并在C和Perl之间映射调用约定时提供一些便利。
您所需做的就是使用您嵌入的perl解释器注册已编译为嵌入式应用程序的XSUBs。
#include "XSUB.h"
XS(XS_some_func);
XS(XS_some_func)
{
dXSARGS;
char *str_from_perl, *str_from_c;
str_from_perl = SvPV_nolen(ST(0));
str_from_c = some_c_func(str_from_perl);
mXPUSHp(c_str);
XSRETURN(1);
}
newXS("Some::Perl::function", XS_some_func, __FILE__);
当嵌入Perl时,通常会在传递给parse_perl
的xs_init函数中完成此类操作。
EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
static void
xs_init (pTHX)
{
newXS("Some::Perl::function", XS_some_func, __FILE__);
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
}
perl_parse(my_perl, xs_init, argc, my_argv, NULL);
之后,您就可以在perl空间中调用XSUB,如Some::Perl::function
,而该XSUB则可以自由地以任何方式回调到您的应用程序。