如何将 C NULL 传递给基于 XS 的函数?
How to pass C NULL to XS based function?
我正在尝试使用 Crypt::OpenSSL::EC 模块中的 Crypt::OpenSSL::EC::EC_POINT::mul() 函数。它有这样的C原型:
int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx)
而且我需要传递 NULL,NULL 而不是 EC_POINT *q
,const BIGNUM *m
,因为它在这里制作:
但是这个模块有这样的类型映射:
INPUT
BIGNUM
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_METHOD
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_GROUP
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_POINT
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_KEY
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
因此,如果我传递 undef 或 0,我将得到 "argument is not an object" 错误。
是否可以在不更改此模块的情况下制作我想要的东西?也许我可以以某种方式创建基于 NULL 的对象?
根据类型映射,将引用传递给零 [=11=]
应该可行:
Crypt::OpenSSL::EC::EC_POINT::mul($group, $r, $n, [=10=], [=10=], $ctx);
我正在尝试使用 Crypt::OpenSSL::EC 模块中的 Crypt::OpenSSL::EC::EC_POINT::mul() 函数。它有这样的C原型:
int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx)
而且我需要传递 NULL,NULL 而不是 EC_POINT *q
,const BIGNUM *m
,因为它在这里制作:
但是这个模块有这样的类型映射:
INPUT
BIGNUM
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_METHOD
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_GROUP
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_POINT
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
EC_KEY
if( ! SvROK( $arg ) ) { croak( \"argument is not an object\" ); }
$var = (${type}) SvIV( SvRV( $arg ) );
因此,如果我传递 undef 或 0,我将得到 "argument is not an object" 错误。 是否可以在不更改此模块的情况下制作我想要的东西?也许我可以以某种方式创建基于 NULL 的对象?
根据类型映射,将引用传递给零 [=11=]
应该可行:
Crypt::OpenSSL::EC::EC_POINT::mul($group, $r, $n, [=10=], [=10=], $ctx);