On Fri, Jun 12, 2009 at 10:49 PM, Patrick Dupre <[email protected]> wrote:
>
> To pass an integer, I use to make a newSViv.
> How do I do to pass a int* ?
>
> Perhaps not exactly what you're after ... hope it helps:
##########################################
use warnings;
use Inline C => Config =>
BUILD_NOISY => 1;
use Inline C => <<'EOC';
void foo(SV * x) {
int i = SvIV(SvRV(x));
printf("%d\n", i);
}
SV * bar() {
int i, *iptr;
SV *obj_ref, *obj;
iptr = &i;
i = 1234567;
obj_ref = newSV(0);
obj = newSVrv(obj_ref, NULL);
sv_setiv(obj, *iptr);
SvREADONLY_on(obj); /* optional */
return obj_ref;
}
EOC
$x = 173;
foo(\$x);
$ref = bar();
print $$ref, "\n";
##########################################
Outputs:
17
1234567
Cheers,
Rob